一、数据库完整性概述
数据库的完整性包括数据库的正确性与数据库的相容性。
完整性检查和控制的防范对象主要是不合语义、不正确的数据,防止它们进入数据库。完全性控制的防范对象是非法用户和非法操作。防止它们对数据库中的数据进行非法的获取。
2.2实现方式
①SQL标准使用了一系列的概念来描述完整性,包括关系模型的实体完整性,参照完整性和用户定义的完整性。这些完整性由SQL的数据定义语言语句实现,它们作为数据库模式的一部分存入数据字典中。
②数据库管理系统用于检查数据库完整性约束条件的机制称为数据库完整性的检查。一般在INSERT,DELETE,UPDATE等操作执行之后,或是在事务提交时检查。检查操作执行后数据库中的数据是否违反了完整性约束条件。
③数据库在发现数据违反了数据的完整性机制之后就进行相应的违约处理,比如不执行该动作,取消级联。
注:数据库的完整性机制是关系型数据库系统的核心功能,可以为用户和应用提供一致的数据库完整性。数据库的完整性无法通过程序来实现,因为使用应用程序实现数据库的完整性存在漏洞,可能会被其它的应用程序破坏。
定义为列级的约束条件
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)
);
: 3.2、实体完整性的检查和违约处理
每当用户程序对基本表插入一条记录或对主码进行更新操作时,实体完整性规则将自动检查。包括
(1)检查主码是否唯一,如果不唯一则拒绝插入或修改。
(2)检查主码各属性是否为空,如果有一个为空则拒绝插入或修改。
检查主码是否唯一的一种方法是进行全表扫描,依次判断每一条记录的主码值和插入的主码值是否相同。由于全表扫描十分耗时,关系型数据库系统一般都在主码上建立一个索引。
Create Table SC
(
Sno CHAR(9) NOT NULL,
Cno CHAR(9) NOT NULL,
Grade SMALL INT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
: 4.2、参照完整性的检查以及违约处理
①拒绝执行。该策略一般为默认策略。
②级联操作。
③设置为空值。
Create Table SC
(
Sno CHAR(9) NOT NULL,
Cno CHAR(9) NOT NULL,
Grade SMALL INT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno)
ON DELETE CASCADE
/*当删除Student表中的元组时,级联删除SC表中的相应元组*/
ON UPDATE CASCADE,
/*当更新Student表中的元组时,级联更新SC表中的相应元组*/
FOREIGN KEY(Cno) REFERENCES Course(Cno)
ON DELETE NO ACTION
/*当删除Course表中的元组时造成与SC表不一致,拒绝删除*/
ON UPDATE CASCADE
/*当更新Course表中的cno时,级联更新SC表中的相应元组*/
);
以Check短语为例
Student表中的Ssex只允许取“男”或“女”。
Create Table Student
(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) CHECK(Ssex IN('男','女')),
Sage SMALLINT,
Sdept CHAR(20)
);
当像表中插入元组或修改属性的值时,关系数据库系统会检查属性上的约束条件是否被满足,如果不满足则操作将拒绝执行。
CONSTRAINT <完整性约束条件名> <完整性约束条件>
6.2 修改完整性规则限制
可以使用ALTER TABLE语句修改表中的完整性限制。
/*去掉完整性限制*/
DROP CONSTRAINT C1;
/*添加完整性限制*/
ADD CONSTRAINT C2 CHECK(Sno BETWEEN 9000 AND 9999);