实体完整性
实体完整性在CREATE TABLE中用PRIMARY KEY定义,就是定义码
例5.1 将Student表中的Sno属性定义为码
在列级定义:
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20));
也可以在行级定义
CREATE TABLE Student
(Sno CHAR(9),
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY(Sno));
例5.2 将SC表中的Sno,Cno属性组定义为码。
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY(Sno,Cno));
这个跟5.1一样,因为要把两列都定义为码,只能在表级定义主码。
参照完整性
在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照了哪些表的主码。
例5.3 定义SC中的参照完整性。
CREATE TABLE SC
(Sno CHAR(9)NOT NULL,
Cno CHAR(4)NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno));
在表级定义的Sno,Cno为主码
Sno,Cno也是在表级定义的参照完整性。
例5.4 显示说明参照完整性的违约处理事例。
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student (Sno)
ON DELETE CASCADE
ON UPDATE CASCADE
FOREIGN KEY(Cno) REFERENCES Course (Cno)
ON DELETE NO ACTION
ON UPDATE CASCADE);
主要是针对被参照表的操作
当删除(或更新)Student表中的元组时,级联删除(或更新)SC表中的相应元组。
删除Course表中的元组,如果与SC表不一致,则拒绝删除。
更新Course表的Cno,SC表也跟着更新。
被参照表更新,参照表拒绝/更改/设为空值。
用户定义完整性
列值非空 NOT NULL
列值唯一 UNIQUE
检查列值是否满足一个条件 CHECK短语
例5.5 定义表时,说明一些属性不允许空值。
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMAL