[例5.1] 将Student表中的Sno属性定义为码
create Table Student
(Sno char(9) PRIMARY KEY,
Sname char(9) NOT NULL,
Ssex char(2),
Sage smallint,
Sdept char(20));
[例5.2] 将SC表中的Sno,Cno属性组定义为码
CREATE TABLE SC
(Sno NCHAR(11),
Cno NCHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
[例5.3]定义SC中的参照完整性
代码同上
[例5.4] 显式说明参照完整性的违约处理示例
create Table SC2
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno)
on update cascade
on delete cascade,
FOREIGN KEY (Cno) REFERENCES Course(Cno)
on update cascade
on delete no action, --拒绝
);
这是针对被参照表的操作。参照表SC可以delete,insert一个不符合外键规则的直接拒绝。
用户定义的完整性
这里分为属性上约束还有元组的约束。
列上的:not null,unique,check
元组上的:check
【例5.7】Student表的Ssex只允许取“男”或“女”。
create Table Student2
(Sno char(9) PRIMARY KEY,
Sname char(9) NOT NULL,
sex char(2) check(Ssex IN('男','女')),
Sage smallint,
Sdept char(20));
[例5.8] SC表的Grade的值应该在0和100之间。
create Table SC3
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT check (Grade>=