目录
1实体完整性(主键)
1.1实体完整性检查
1.2实体完整性定义
1.3实体完整性删除
2.参照完整性(外键)
2.1参照完整性检查
2.2参照完整性定义
2.2参照完整性删除
3.用户定义的完整性
3.1属性上的约束条件(列级完整性约束)
3.2元组上的约束条件(表级完整性约束)
4断言(Mysql已淘汰)
4.1创建断言
4.2删除断言
5.触发器
5.1创建触发器
5.2删除触发器
5.3显示触发器
数据库完整性:数据库完整性约束指数据的正确性和相容性
1实体完整性(主键)
1.1实体完整性检查
主码唯一且其各属性不为空
主码定义时自动创建索引,提高实体完整性检查速度
1.2实体完整性定义
列级约束条件定义
Create table 表名(
列名 int primary key,
…
);
表级约束条件定义
Create table 表名(
…
primary key(列名1,[列名2,...])
);
多个属性作为主键时,只能使用表级约束条件定义方法
alter table语句定义
Alter table 表名 add primary key(列名1,[列名2,...]);
1.3实体完整性删除
Alter table 表名 drop primary key;
2.参照完整性(外键)
R(Kr,F,…)----->S(Ks,…)
F是Ks的外码,F不是基本关系R的主码,Ks是基本关系的S的主码
基本关系R称为参照关系,基本关系S称为被参照关系或目标关系
F与Ks需定义在同一个域上,F上的值为空值或Ks上的某个取值
2.1参照完整性检查
对目标关系S中的某一元组进行更新操作时,参照关系R中的外码存在对欲更新元组中被引用属性值的引用时,会出现参照不一致问题,解决策略如下:
级联操作:连带删除参照关系S中的相关元组
拒绝操纵:拒绝该更新操作
2.2参照完整性定义
表级约束条件定义
Create table 表名(
…
Constraint foreign key 外键名(列名1,[列名2,...])
references 被参照表名(列名1,[列名2,...])
[ On delete cascade //级联操作
On update no action ] //拒绝执行,默认
);
alter table语句定义
Alter table 表名 add foreign key 外键名(列名1,[列名2,...]) references 被参照表名(列名1,[列名2,...]);
2.2参照完整性删除
Alter table 表名 drop foreign key 外键名;
3.用户定义的完整性
3.1属性上的约束条件(列级完整性约束)
列值非空:not null
列值唯一:unique
列值默认值:default 值
列值自增:auto_increment
列值检查:check (条件表达式)(Mysql已淘汰)
3.2元组上的约束条件(表级完整性约束)
Create table 表名(
…
Constraint 约束名 check(条件表达式)(Mysql基本已淘汰)
);
4断言(Mysql已淘汰)
4.1创建断言
Create assertion 断言名 check(条件判断句);
4.2删除断言
Drop assertion 断言名;
5.触发器
5.1创建触发器
Create trigger 触发器名
Before|After Insert | Update | Delete on 表名
For each row | statement
语句;
eg:
DELIMITER $$
create trigger tri_test
before insert on table_a
for each row
begin
declare msg varchar(200);
if new.a >10 then
set @sum = new.a;
elseif new.a <10 then
set msg = "插入数值需大于或等于10,请重试!";
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
end if;
end $$
DELIMITER ;
5.2删除触发器
Drop trigger 触发器名;
5.3显示触发器
Show trigger \G;