数据完整性约束定义:是指数据的正确性和相容性,为了防止数据库中存在不符合语义的数据,防止数据库中存在不正确的数据。在关系型模型中提供了三种规则:实体完整性,参照完整性,和用户定义完整性。
实体完整性规则:实体是一个数据对象,是指客观存在并可以相互区分的事务,如一个学生或一个职员。实体完整性规则是指关系的主属性,即主键的组成不能为空,也就是关系的主属性不能为空值NULL。实体完整性是通过主键约束和候选键约束来实现的。
1.主键约束
主键可以是表中的一列也可以是表中多个列的组合,多个列组合而成的主键也叫复合主键。
规则·:
(1)每个表只能定义一个主键;
(2)唯一性原则。主键的值必须能够唯一标识表中的每一行记录。
(3)最小化原则,复合主键·不能包含不必要的多余列;
(4)一个列名在复合主键的列表中只能出现一次。
作为列的完整性约束:
CREATE TABLE(
字段 类型()not null primary key;
...);
作为表的完整性约束:
CREATE TABLE(
字段 类型()not null,
。。。
PRIMARY KEY(字段,字段2...)
);
2.候选键约束:
定义:若一个属性集能唯一标识元组,且不含多余的属性,那么这个属性集称为关系的候选键。任何时候候选键的值必须是唯一的,且不能为空NULL。其可以在CREATE TABLE 和ALTER TABLE 使用关键字UNIQUE来定义。
候选键与主键区别:(1)一个表只能创建一个主键,但可以定义多个候选键。(2)定义主键系统会主动创建PRIMARY KEY 索引,而定义候选键约束,系统会自动创建UNIQUE索引。
参照完整性规则:即魔偶关系的属性值需要参照另一关系的属性和值,这就叫参照。参照完整性规则就是定义主键和外键之间额引用规则,它对关系间引用数据的一种限制。目前只有InnoDB引擎支持外键约束。
InnoDB引擎类型中声明外键基本语法格式如下:
FOREIGN KEY (INDEX_COL_NAME,...) REFERENCE_DEFINITION;
FRFERENCE_DEFINITION 主要用于定义外键所参照的表,列,参照动作的声明和实施策略:
REFERENCES TBL_NAME [(COL_NAME(LENGTH) ASC|DESC)]
[MATCH FULL|MATCH PARTIAL|MARTCH SIMPLE]
[ON DELETE REFERENCE_OPTION]
[ON UPDATE REFERENCE_OPTION];
REFERENCE_OPTION选项有以下几种:RESTRICT(限制策略:当要删除或更新被参照表中被参照列上,并在外键中出现的值时,系统拒绝对被参照表的删除或更新操作。)CASECADE(级联策略:从被参照表中删除或更新数据记录时,自动删除或更新参照表中匹配的记录行。)SET NULL (置空策略:当从被参照表中删除或更新记录行时,设置参照表中与之对应的外键列的值为NULL.这个策略需要被参照表中外键列没有声明限定词NOT NULL。)NO ACTION(不采取实施策略:当一个相关的外键值在被参照表中,删除或者更新被参照表中键值的动作不被允许。该策略的动作语言与RESTRICT 相同)
用户定义完整性规则:针对某一应用环境的完整性约束条件,其反映了某一具体应用所涉及的数据要求。
1:非空约束 NOT NULL;
2:CHECK约束:CHECK(表达式)
3:触发器
命名完整性约束:定义约束的同时对约束进行命名。PRIMARY KEY的名称只能是PRIMARY;
语法:CONSTRAINT 约束名
PRIMARY KEY 短语|FORIENGN KEY 短语|CHECK 短语
删除完整性约束:ALTER TABLE TABLE_NAME DROP PRIMARY KEY |FORIEGN KEY|... 约束名;
修改完整性约束:先删除约束,再添加相同约束。ALTER TABLE TABLE_NAME ADD CONSTRAINT ...;