数据库完整性
实体完整性
实体完整性定义
在列定义主码
CREATE TABLE student(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) NOT NULL,
Ssex CHAR(2)
);
在表级定义主码
CREATE TABLE student(
Sno CHAR(9),
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY(Sno)
);
将多个属性同时定义为码,只能在表级定义
CREATE TABLE SC(
Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY(Sno,Cno)/*只能在表级定义主码*/
)
实体完整性检查以及违约处理
插入或对主码列进行更新操作时,关系数据库管理系统(RDBMS)按照实体完整性规则自动进行检查,包括:
检查主码是否唯一
检查主码各属性是否为空
若违规则拒绝插入或修改。
参照完整性
外码、参照关系、被参照关系的外码取值规则:要么为空,要么等于对应参照关系的某个主码值。
例如,关系SC中(Sno,Cno)是主码,Sno、Cno分别参照Student表的主码和Course表的主码,定义参照完整性如下:
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)
);
用户自定义完整性
列值非空
NOT NULL
列值唯一
UNIQUE
检查一个列值是否满足一个条件表达式(CHECK)
例:Student表Ssex只允许取男女
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) CHECK (Ssex ('男','女')),
Sage SMALLINT
);