定义:数据库的完整性 (integrity )是指数据的正确性 (correctness) 和相容性 (compat- ability)。
维护数据库的完整性, 数据库管理系统必须能够实现如下功能:
关系模型的实体完整性在CREATE TABLE中用PRIMARY_KEY定义
CREATE TABLE student (
Sno CHAR ( 9 ) PRIMARY KEY,/*对一列用或者说对单个属性用*/
Sname CHAR ( 20 ) UNIQUE,
Ssex CHAR ( 2 ),
Sage SMALLINT,
Sdept CHAR ( 20 )
);
或者
CREATE TABLE student (
Sno CHAR ( 9 ),
Sname CHAR ( 20 ) UNIQUE,
Ssex CHAR ( 2 ),
Sage SMALLINT,
Sdept CHAR ( 20 ) ,
PRIMARY KEY(Sno)/*放在最后就是对表*/
);
简而言之:主要让你明白PRIMARY KEY 有两种使用方法,尚且不说会不会用,但是一定要看得懂。还有实体完整性就是PRIMARY KEY 在创表中的使用
简而言之:插入数据时,主码的值不为空,且不能重复,否则,会插入不成功。
答:关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。
简而言之:就是创表的时候有FOREIGN KEY语句就是参照完整性了,而且,被参照的属性,必须是主码
CREATE TABLE SC (/*这就是定义在SC表上的参照完整性*/
Sno CHAR ( 9 ),
Cno CHAR ( 4 ),
Grade SMALLINT,
PRIMARY KEY ( Sno, Cno ),
FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
FOREIGN KEY ( Cno ) REFERENCES Course ( Cno )
);
CREATE TABLE SC (/*这就是定义在SC表上的参照完整性*/
Sno CHAR ( 9 ),
Cno CHAR ( 4 ),
Grade SMALLINT,
PRIMARY KEY ( Sno, Cno ),
FOREIGN KEY ( Sno ) REFERENCES student ( Sno )
ON DELETE CASCADE/*当删除Student表中的元组时, 级联删除SC表中相应的元组*/
ON UPDATE CASCADE,* 当更新Student表中的sno时, 级联更新SC表中相应的元组*/
FOREIGN KEY ( Cno ) REFERENCES Course ( Cno )
ON DELETE NO ACTION/*当删除Course 表中的元组造成与SC表不一致时, 拒绝删除*/
ON UPDATE CASCADE/*当更新Course表中的cno时, 级联更新SC表中相应的元组*/
);
简而言之:就是,插入数据,完整性发生破坏时,数据库管理人员到底该怎么处理。无非是三种情况,1、发生冲突了,不执行当前语句,2、发生冲突了,把冲突改成了3、发生冲突了,把冲突设置为空
对属性的限制:
/*列值非空(NOT NULL)*/
CREATE TABLE SC (
Sno CHAR ( 9 ) ,
Cno CHAR ( 4 ),
Grade SMALLINT NOT NULL,/*Grade插入数据时不能为空值*/
PRIMARY KEY ( Sno, Cno ),
FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
FOREIGN KEY ( Cno ) REFERENCES Course ( Cno )
);
/*列值唯一(UNIQUE)*/
CREATE TABLE SC (
Sno CHAR ( 9 ) ,
Cno CHAR ( 4 ),
Grade SMALLINT UNIQUE,/*Grade插入数据时不能重复,即相同数据不能插入*/
PRIMARY KEY ( Sno, Cno ),
FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
FOREIGN KEY ( Cno ) REFERENCES Course ( Cno )
);
/*用CHECK短语指定列值应该满足的条件*/
CREATE TABLE SC (
Sno CHAR ( 9 ) ,
Cno CHAR ( 4 ),
Grade SMALLINT
CHECK(Gread >= 0 AND Gread <= 100),/*成绩只能在0-100之间*/
PRIMARY KEY ( Sno, Cno ),
FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
FOREIGN KEY ( Cno ) REFERENCES Course ( Cno )
);
CREATE TABLE SC (
Sno CHAR ( 9 ) ,
Cno CHAR ( 4 ),
Grade SMALLINT,
PRIMARY KEY ( Sno, Cno ),
FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) ,
CHECK(Gread >= 90 OR Sno NOT LIKE '521%')
/*成绩大于等于90或者学号521开头的才能插入*/
);
定义:对完整性约束条件进行命名的语句
基本格式:CONSTRAINT<完整性约束条件名><完整性约束条件>
<完整性约束条件>包括 NOT NULL、 UNIQUE 、 PRIMARY KEY 、 FOREIGN KEY 、 CHECK 短语等。
CREATE TABLE student (
Sno CHAR ( 9 )
CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 9999),
Sname CHAR ( 20 )
CONSTRAINT C2 NOT NULL,
Ssex CHAR ( 2 ),
Sage SMALLINT
CONSTRAINT C3 CHECK(Sage < 30),/*建立约束*/
Sdept CHAR ( 20 ) ,
PRIMARY KEY(Sno)/*放在最后就是对表*/
);
ALTER TABLE Student/*修改哪一个表*/
DROP CONSTRAINT C4; /*修改什么*/
可以定义涉及多个表或聚集操作的比较复杂的完整性约束。 断言创建以后, 任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查, 任何使断言不为真值的操作都会被拒绝执行。
创建基本格式:CREATE ASSERTION<断言名><CHECK子句>
简而言之,ASSERTION + 断言名 + 查询语句
CREATE ASSERTION ASSE_SC_CNUMI
CHECK(60 >= ALL(SELSCE COUNT(*)
FROM SC
GROUP BY cno)
);
删除基本格式:DROP ASSRETION<断言名>;
结束!这一章总的来说,就是讲了,属性、属性与属性、表与表,之间的插入值非法的问题(即完整性被破坏),应该怎么设置,插入值的类型及类型。