3.2.2 基本模式定义
创建关系 create table
create table命令格式
命令以分号结束
完整性约束
primary key
foreign key
not null
SQL不允许破坏完整性约束的命令执行
主码不能为空 主码不能重复
外码要在被参照关系中存在
插入元组 insert into
删除元组 delete from
删除关系 drop table
drop table 和delete from
alter table
为已有的关系增加属性 alter table r add A D
从关系中去掉属性 alter table r drop A
有些数据库不支持删除属性
3.2.2 基本模式定义
创建关系 create table
我们用create table
命令定义SQL
关系。
下面的命令在数据库中创建了一个department
关系。
1 | create table department( |
上面创建的关系具有三个属性:
dept_name
是最大长度为20的字符串,building
是最大长度为15的字符串,budget
是一个12位的数,其中2位数字在小数点后面。create table
命令还指明了dept_name
属性是department
关系的主码。
create table命令格式
create table
命令的通用形式是:
1 | create table r( |
其中r
是关系名,每个A_n
是关系r
模式中的一个属性名,D_n
是属性A_n
的域,也就是说D_n
约束了属性A_n
的类型以及可选的范围,是用于限制所允许的A取值的集合。
命令以分号结束
create table
命令后面用分号结束,本章后面的其他SQL
语句也是如此,在很多SQL
实现中分号是可选的。
完整性约束
SQL
支持许多不同的完整性约束。在本节我们只讨论其中少数几个:
primary key
primary key(A1, A2,...,Am)
: primary key
声明表示属性A1,A2,…,Am
构成关系的主码。主码属性必须非空且唯一。也就是说没有一个元组在主码属性上取空值,关系中也没有两个元组在所有主码属性上取值相同。虽然主码的声明是可选的,但为每个关系指定一个主码通常会更好。
foreign key
foreign key(A1,A2,... An) references 关系S
:foreign key
声明表示关系中任意元组在属性(A1,A2,…,An)
上的取值必须对应于关系s
中某元组在主码
属性上的取值。
not null
not null
:一个属性上的not null
约束表明在该属性上不允许空值。
SQL不允许破坏完整性约束的命令执行
SQL
禁止破坏完整性约束的任何数据库更新。
主码不能为空 主码不能重复
例如,如果关系中一条新插入或新修改的元组在任意一个主码
属性上有空值,或者元组在主码属性上的取值
与关系中的另一个元组的主码属性值相同,SQL
将标记个错误,并阻止更新。
外码要在被参照关系中存在
类似地,如果插入的course
元组在dept_name
上的取值没有出现在department
关系中,就会破坏course
上的外码约束,SQL
会阻止这种插入的发生。
插入元组 insert into
1 | insert into instructor values(10211, "Smith", "Biology",66000); |
删除元组 delete from
1 | delete from student; |
删除关系 drop table
如果要从SQL
数据库中去掉一个关系,我们使用drop table
命令。 drop table
命令从数据库中删除关于被去掉关系的所有信息。
drop table 和delete from
命令drop table r;
是比delete from r;
更强的语句。
delete from r;
只是删除r
中的所有元组,但会保留关系r
。drop table r;
不仅删除r
的所有元组,还删除r
的模式。此时,除非用create table
命令重建关系r
,否则无法将元组可以插入到关系r
中。
alter table
为已有的关系增加属性 alter table r add A D
使用alter table
命令可以给已有关系增加属性。关系中的所有元组在新增加的属性上的取值将被设为null
,alter table
命令的格式为:
1 | alter table r add A D |
其中r
是现有关系的名字,A
是待添加属性的名字,D
是待添加属性的域。
从关系中去掉属性 alter table r drop A
通过命令alter table r drop A
可以从关系中去掉属性。
其中r
是现有关系的名字,A
是关系的一个属性的名字。
有些数据库不支持删除属性
很多数据库系统并不支持去掉属性,尽管它们允许去掉整个表。