-
实体完整性
在CREATE TABLE时用PRIMARY KEY定义,分为列级约束条件(写在列后面)和表级约束条件(写在表的最后)。
定义主码相当于UNIQUE+NOT NULL。
全表扫描十分耗时,因此会自动在主码上建立一个索引。如B+树索引,提高效率。
-
参照完整性
在CREATE TABLE时用FOREIGN KEY定义那些列为外码,用REFERENCES指明这些外码参照那些表的主码。
违约处理:拒绝执行(NO ACTION)为默认策略,级联操作(CASCADE),设置为空值。
违约处理实例:ON DELETE CASCADE,ON UPDATE NO ACTION.
对于参照完整性,除了定义外码,还应该定义外码列是否允许空值。
-
用户自定义完整性
属性上的约束条件:NOT NULL,UNIQUE,CHECK短语(检查列值满足某表达式)
元组上的约束条件:使用CHECK短语,可以设置不同列之间的取值相互约束条件。
(check短语里的内容同where语句)
-
完整性约束命名子句
创建语法:CONSTRAINT<约束名><约束条件>,实例:CONSTRAINT name CHECK(age>30)
修改完整性限制,在ALTER TABLE时修改
删除:DROP CONSTRAINT name
增加:ADD CONSTRAINT name CHECK(num BETWEEN 1 AND 100)
更新:先删除原来的约束条件,在增加新的约束条件
-
域的完整性约束
域是具有相同数据类型的值的集合。
CREATE DOMAIN建立域以及约束就可以用来定义属性。实例:CREATE DOMAIN name CHAR(5) NOT NULL
可以用ALTER DOMAIN修改域。
-
断言
使用断言指定一般性的约束,任何使断言不为真值的操作都会被拒绝执行。
语句格式:CREATE ASSERTION <断言名><CHECK子句>
删除断言:DROP ASSERTION<断言名>
-
触发器
触发器即事件-条件-动作规则。当特定事件发生,对条件进行检查,成立就执行动作。
触发器只能定义在基本表上,不能定义在视图上。
触发事件可以为INSERT,DELETE,UPDATE或者为其组合,以及UPDATE OF<触发列>
触发器类型有行级触发器(FOR EACH ROW)和语句级触发器(FOR STATEMENT)
格式
CREATE TRIGGER <触发器名>
{BEFORE|AFTER} <触发事件> ON<表名> //指明触发器激活时间,
REFERENCING NEW|OLD ROW AS<变量>
FOR EACH {ROW|STATEMENT}
[WHEN<触发条件>]<触发动作体>