数据库的完整性是指数据的正确性和相容性。数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;数据的相容性是指数据库同一对象在不同关系表的数据是符合逻辑的
数据的完整性和安全性是两个既有联系又不尽相同的概念。数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据;数据的安全性是保护数据库防止恶意破坏和非法获取
为了维护数据库的完整性,数据库管理系统必须能够实现如下功能:
关系数据库管理系统使得完整性控制成为其核心支持的功能,从而能够为所有用户和应用提供一致的数据库管理完整性
实体完整性的定义
关系模型的实体完整性在CREATE TABLE 中用PRIMARY KEY定义
列级约束条件
create table student(
sno char(10) primary key,
......
)
表级约束条件
create table student(
sno char(10) ,
......
primary key(sno)
)
实体完整性检查和违约处理
关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码
create table sc(
sno char(10) primary key,
cno char(10),
foreign key sno references student(sno)
)
可被参照的对象:
参照完整性检查
违约处理
属性上的约束条件
元组上的约束条件
示例
CREATE TABLE student(
Sno char(10) primary key,
Sname char(10) unique not null,
Ssex char(2),
check(Ssex='女' or Sname NOT LIKE('Ms.%')
)
上面的完整性约束条件都在CREATE TABLE语句中定义,SQL还在CREATE TABLE语句中提供了完整性约束命名子句CONSTRAINT,用来对完整性约束条件命名,从而可以灵活地增加、删除一个完整性约束条件
完整性约束命名子句
CONSTRAINT <完整性约束条件名><完整性约束条件>
完整性约束条件包括NOT NULL、UNIQUE、 PRIMARY KEY、 FOREIGN KEY、 CHECK短语等
修改表中的完整性限制
alter table <表名>
drop constraint <完整性约束名> //删除完整性约束
add CONSTRAINT <完整性约束条件名> <完整性约束条件> //添加完整性约束
在涉及多表或聚集操作的比较复杂的完整性约束时使用
CREATE ASSERTION <断言名> <CHECK 子句>
DROP ASSERTION <断言名>
触发器是用户定义在关系表上的一类由事件驱动的特殊过程
定义触发器
CREATE TRIGGER <触发器名>
{BEFORE|AFIER} <触发事件> ON <表名> //触发事件前/触发事件后,触发事件包括select、 delete、update和insert,可以单个也可以组合
REFERENCING|OLD ROW AS<变量>
FOR EACH{ROW|STATEMENT} //列级触发器|语句级触发器
[WHEN <触发条件>]<触发动作体>
激活触发器
触发器的执行是由触发事件激活,并由数据库服务器自动执行的。如果一个表上有多个触发器,激活触发器的顺序是
删除触发器
DROP TRIGGER <触发器名> ON <表名>
王珊,萨师煊.数据库系统概论(第五版)[M].北京:高等教育出版社,2014:157-172.