上篇博文提到:关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有数据库模式、表、索引、视图等。相应的,SQL的数据定义功能包括数据库模式定义、表定义、索引定义和视图定义。
本篇博文主要介绍使用相关的SQL语句实现数据库模式、表和索引的定义,关于视图定义会在以后的博文中另行介绍。
下表所使罗列了SQL标准所提供的数据定义语句。
操作对象 创建 删除 修改 模式 CREATE SCHEMA语句 DROP SCHEMA语句 表 CREATE TABLE语句 DROP TABLE语句 ALTER TABLE语句 视图 CREATE VIEW语句 DROP VIEW语句 需要注意的是:SQL标准不提供修改数据库模式定义和修改视图定义的操作,用户如果需要修改这些对象,可先将它们删除然后再重建,或者也可以使用具体的关系数据库管理系统所提供的扩展语句来实现,例如MySQL数据库中的ALTER SCHEMA、ALTER VIEW等语句;另外,SQL标准也没有提供索引相关的语句,但为了提高查询效率,商用关系数据库管理系统通常都提供了索引机制和相关语句,例如使用MySQL数据库中的CREATE INDEX语句、DROP INDEX语句和ALTER INDEX语句分别实现创建、删除和修改索引。
数据库模式的定义包含数据库的创建、选择、修改、删除、查看等操作。
1、创建数据库
在MySQL中,可以使用CREATE DATABASE或CREATE SCHEMA语句创建数据库,其语法格式是:
CREATE {DATABASE|SCHEMA}[IF NOT EXISTS] db_name
[DEFAULT]CHARACTER SET {=} charset_name
|[DEFAULT] COLLATE [=] collation_name;
符号或关键字 | 释义 |
---|---|
[] | 表示其内容为可选项; |
I | 用于分隔花括号中的选择项,表示可选择其中一项来与花括号外的语法成分共同组成SQL语句命令,选项彼此间是”或”的关系; |
db_name | 表示数据库名称命名,该数据库名必须符合操作系统文件夹命名规则,而在MySQL中则不区分大小写; |
DEFAULT | 用于指定默认值; |
CHARACTER SET | 用于指定数据库字符集(Charset); |
COLLATE | 指定字符集的校对规则——《引文:字符集的校对规则详解》 |
IF NOT EXISTS | 用于在创建数据库前进行判断,只有该数据库目前尚不存在时才执行CREATE DATABASE操作,此选项可以避免出现数据库已经存在而再新建的错误。 |
示例1:在MySQL中创建一个名为mysql_test的数据库。
在Mysql的命令行客户端输入如下SQL语句即可:
#创建一个名为mysql_test的数据库
CREATE DATABASE mysql_test;
如果再输入上述语句,系统会提示
错误代码: 1007
Can't create database 'mysql_test'; database exists
这是因为Mysql不允许再同一系统中两个数据库使用相同的名字。在该数据库创建命令中加上”IF NOT EXISTS”从句,则可避免错误的发生,代码如下:
CREATE DATABASE IF NOT EXISTS mysql_test;
2、选择数据库
使用USE语句可以实现从一个数据库”跳转“到另一个数据库,在用CREATE DATABASE语句创建了数据库之后,该数据库不会自动成为当前数据库,需要用这条USE语句来指定,其语法是:
USE db_name;
只有使用USE命令指定某个数据库为当前数据库之后,才能对该数据库及其存储的数据对象执行各种后续操作。
3、修改数据库
可以使用ALTER DATABASE或者ALTER SCHEMA语句来修改已经被创建的数据库的相关参数,其语法简略为:
ALTER {DATABASE|SCHEMA}[db_name]
alter_spacification ...
示例2:修改已有数据库mysql_test的默认字符集和校对规则。
ALTER DATABASE mysql_test
DEFAULT CHARACTER SET gb2312
DEFAULT COLLATE gb2312_chinese_ci;
4、删除数据库
当需要删除已创建的数据库时,可使用DROP DATABASE或DROP SCHEMA语句,语法是:
DROP {DATABASE|SCHEMA} [IF EXISTS] db_name;
示例3:分别不使用和使用”IF EXISTS”关键字删除一个系统中尚未创建的数据库”mytest”。
#不使用"IF EXISTS"关键字
DROP DATABASE mytest;
执行结果如下:不能删除不存在的库:
错误代码: 1008
Can't drop database 'mytest'; database doesn't exist
代码修改后执行结果如下:不报错
#使用"IF EXISTS"关键字
DROP DATABASE IF EXISTS mytest;
由此可见”IF EXISTS”可以避免删除不存在的数据库时出现Mysql错误信息。
另外需要注意:使用DROP DATABASE或DROP SCHEMA语句会删除指定的整个数据库,包括所有表(其中的所有数据)将永久删除,使用该语句需慎重,避免招来杀身之祸。。。。。。
5、查看数据库
可使用SHOW DATABASES或SHOW SCHEMAS语句查看可用数据库列表,语法:
SHOW {DATABASES|SCHEMAS}
{LIKE 'pattern'|WHERE expr}
可选项”LIKE“关键字用于匹配指定的数据库名称;可选项”WHERE“从句用于指定数据库名称查询范围条件。
使用SHOW DATABASES或SHOW SCHEMAS语句只会列出当前用户权限范围内所能查看到的所有数据库名称。
示例4:列出当前用户可查看的数据库列表。
SHOW DATABASES;