5.1. 数据库和表的基本操作¶
5.1.1. 查看数据库系统的所有数据库¶
备注
对于 SQL Server 来说,获取一些基本信息常常需要使用系统定义的存储过程。
5.1.1.1. SQL Server 下查看数据库系统的所有数据库¶
查看数据库(系统)的所有数据库有以下方法:
通过存储过程
sp_databases(注意:该存储过程是系统级的,在任意数据库都可以使用且效果一样)通过查询
sys.databases
5.1.1.1.1. sp_databases¶
-- 系统存储过程 : sp_databases
ALTER procedure [sys].[sp_databases]
as
set nocount on
select
DATABASE_NAME = db_name(s_mf.database_id),
DATABASE_SIZE = convert(int,
case -- more than 2TB(maxint) worth of pages (by 8K each) can not fit an int...
when sum(convert(bigint,s_mf.size)) >= 268435456
then null
else sum(convert(bigint,s_mf.size))*8 -- Convert from 8192 byte pages to Kb
end),
REMARKS = convert(varchar(254),null)
from
sys.master_files s_mf
where
s_mf.state = 0 and -- ONLINE
has_dbaccess(db_name(s_mf.database_id)) = 1 -- Only look at databases to which we have access
group by s_mf.database_id
order by 1
GO
DATABASE_NAME |
DATABASE_SIZE |
REMARKS |
|---|---|---|
bladex_boot |
16384 |
NULL |
bladex_boot_copy |
4472832 |
NULL |
bladexbootbak |
1654784 |
NULL |
cbbs |
16384 |
NULL |
learning_sql_server |
16384 |
NULL |
master |
7552 |
NULL |
model |
16384 |
NULL |
msdb |
21824 |
NULL |
tempdb |
73728 |
NULL |
5.1.1.1.2. 查询 sys.databases¶
通过执行查询命令 SELECT name AS database_name,database_id,collation_name FROM sys.databases 来查看所有数据库。
database_name |
database_id |
collation_name |
|---|---|---|
master |
1 |
Chinese_PRC_CI_AS |
tempdb |
2 |
Chinese_PRC_CI_AS |
model |
3 |
Chinese_PRC_CI_AS |
msdb |
4 |
Chinese_PRC_CI_AS |
bladex_boot |
5 |
Chinese_PRC_CI_AS |
bladex_boot_copy |
6 |
Chinese_PRC_CI_AS |
learning_sql_server |
7 |
Chinese_PRC_CI_AS |
cbbs |
8 |
Chinese_PRC_CI_AS |
bladexbootbak |
9 |
Chinese_PRC_CI_AS |
5.1.1.2. MySQL 下查看数据库系统的所有数据库¶
MySQL 下的查看方法为: show databases
mysql> show databases;
+---------------------+
| Database |
+---------------------+
| information_schema |
| ... |
| yggl |
+---------------------+
20 rows in set (0.00 sec)
5.1.2. 使用数据库系统中的某个数据库¶
使用 use 关键字使用或更换使用的数据库,这个是 sql 通用的命令关键字。
命令形如 use target_database
备注
这个方法通用于 SQL Server 和 MySQL 。
5.1.3. 查看数据库的全部表¶
5.1.3.1. SQL Server 下查看数据库的全部表¶
有以下方法
通过存储过程
sp_tables(注意:该存储过程是系统级的)通过查询
sys.tables
备注
由于 sp_tables 的实现代码长且复杂,同时如果不带参数地执行该存储过程,那么其结果将包含该库的所有表(一般来说我们只需要看 dbo 部分的表)。同时为节省篇幅,所以不将其展示。sp_tables 存储过程 1
5.1.3.1.1. 使用带有参数的 sp_tables¶
不带有参数的 sp_tables 运行产生的结果比较不具备可用性且没有目的性。
让我们通过定义看看 sp_tables 的参数有哪些:
stored procedure learning_sql_server.sys.sp_tables
@table_name nvarchar(384) = null, @table_owner nvarchar(384) = null,
@table_qualifier sysname = null, @table_type varchar(100) = null,
@fUsePattern bit = 1
sp_tables 的参数:
table_name: 表名table_owner: 表的所有者;(一般查询的都为 dbo ,还有 sys 和 INFORMATION_SCHEMA)table_qualifier: 对象限定符; 对象限定符的数据库名称部分必须是当前数据库的名称 ,一般 null 。table_type: 表的类型,有TABLE和VIEW以及SYSTEM TABLE
注意
sp_tables null,null,null,null 是等同于 sp_tables 的。
-- 执行存储过程
sp_tables NULL,dbo,NULL,"'TABLE'"
GO
TABLE_QUALIFIER |
TABLE_OWNER |
TABLE_NAME |
TABLE_TYPE |
REMARKS |
|---|---|---|---|---|
learning_sql_server |
dbo |
books |
TABLE |
NULL |
learning_sql_server |
dbo |
Customers |
TABLE |
NULL |
learning_sql_server |
dbo |
OrderItems |
TABLE |
NULL |
learning_sql_server |
dbo |
Orders |
TABLE |
NULL |
learning_sql_server |
dbo |
Products |
TABLE |
NULL |
learning_sql_server |
dbo |
Vendors |
TABLE |
NULL |
5.1.3.2. MySQL 下查看数据库的全部表¶
use target_database;
show tables;
mysql> use employees;
Database changed
mysql> show tables;
+----------------------+
| Tables_in_employees |
+----------------------+
| current_dept_emp |
| departments |
| dept_emp |
| dept_emp_latest_date |
| dept_manager |
| employees |
| salaries |
| titles |
+----------------------+
8 rows in set (0.00 sec)
5.1.4. 查看表结构¶
5.1.4.1. SQL Server 下查看表结构¶
让我们通过定义看看 sp_tables 的参数有哪些:
stored procedure learning_sql_server.sys.sp_columns
@table_name nvarchar(384), @table_owner nvarchar(384) = null,
@table_qualifier sysname = null, @column_name nvarchar(384) = null,
@ODBCVer int = 2
sp_tables 的参数有:
table_name: 表名table_owner: 表的所有者;(一般查询的都为 dbo ,还有 sys 和 INFORMATION_SCHEMA)table_qualifier: 对象限定符; 对象限定符的数据库名称部分必须是当前数据库的名称 ,一般 null 。column_name: 指定列名(只能一列)
-- 查看表结构
sp_columns books
GO
-- 查看表的某列的结构
sp_columns books,dbo,NULL,"book_id"
GO
5.1.4.2. MySQL 下查看表结构¶
show create table table_name;
mysql> show create table departments;
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| departments | CREATE TABLE `departments` (
`dept_no` char(4) NOT NULL,
`dept_name` varchar(40) NOT NULL,
PRIMARY KEY (`dept_no`),
UNIQUE KEY `dept_name` (`dept_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
备注
show create database database_name;
- 1
所有的系统级存储过程都可以在 SQL Server 的系统数据库的系统存储过程中找到。