数据库—SQL—数据库完整性

5.1 实体完整性

关系模型的实体完整性在CREATE TABLE 中用PRIMARY KEY 定义,对单属性构成的码有两种说明方法:一种是定义为列级约束条件,另一种是定义为表级约束条件。

对多个属性构成的码只有一种说明方法,即定义为表级约束条件。

例:将Student 表中的Sno属性定义为码

 CREATE TABLE Student

(Sno CHAR (9)PRIMARY KEY ,  //在列级定义主码

Sname CHAR (20) NOT NULL,

Ssex CHAR(2)

Sage SMALLINT,

Sdept CHAR(20)

);

5.2 参照完整性

例:定义SC 中的参照完整性

CREATE TABLE SC

(Sno CHAR (9) NOT NULL,

  Cno CHAR(4)NOT NULL,

Greade SMALLINT,

PRIMARY KEY (Sno,Cno), //在表级定义实体完整性

FOREIGN KEY (Sno) REFERENCES Student(Sno), //在表级定义参照完整性

FOREIGN KEY (Cno) REFERENCES Course (Cno) //在表级定义参照完整性

);


5.3 用户定义的完整性

1.不允许取空值

例:在定义SC表时,说明Sno,Cno,Grade属性不允许取空值

CREATE TABLE SC

Sno CHAR(9) NOT NULL,        // Sno属性不允许取空值

Cno CHAR (4) NOT NULL, //Cno属性不允许取空值

Grade SMALLINT NOT NULL, //Grade属性不允许取空值

PRIMARY KEY (Sno,Cno), //如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值则在列级不允许取空值的定义就不用写了


);

2.列值唯一

例:建立部门表DEPT  要求部门名称Dname列取值唯一  部门编号 Deptno列为主码

CREATE TABLE DEPT 

(

Deptno NUMERIC (2),

Dname CHAR(9)UNIQUE, //要求Dname列值唯一

Location CHAR(10),

PRIMARY KEY (Deptno)

);

3.用CHECK短语指定列值应该满足的条件

例:Student表中Ssex只允许取 男 或 女

CREATETABLE Student

Sno CHAR(9)PRIMARY KEY,

Sname CHAR(8)NOT NULL,

Ssex CHAR(2) CHECK (Ssex IN (‘男’,‘女’)), //性别属性Ssex只允许取男或女

Sage SMALINT ,

Sdept CHAR(20)

);

原文地址:https://www.cnblogs.com/tryitboy/p/4231157.html