数据库的完整性约束及触发器

数据库完整性约束

1.约束(列级约束)

  主键

  外键

  不为空

  唯一

  Default

  Check(不支持)

2.触发器(行级约束)

 在对某些表执行更新操作(insert,update,delete)时同时触发一些其他动作,对于查询操作不会触发任何动作

 

#查询系统中的触发器

select trigger_schema,trigger_name from information_schema.triggers;

 

#触发器中不允许执行查询操作

create trigger trg_01#创建触发器 名为 trg_01

after delete#当执行过删除后触发   before 在之前触发

on employee#触发器绑定到employee表中

for each row#行级触发

BEGIN

insert into tb_log(msg) values('员工数据被删除');

end;

 

#删除触发器

drop trigger trg_01;

 

 

#复制表(包括结构数据)

#create table emp_off as select num,name,tel,email,depno,birth from employee;

#复制表结构

#create table emp_temp as select * from employee limit 0,0;

/*

mysql不允许在同一张表上绑定多个同类型触发器(同时做删除,更新,添加)

有一张离职员工表,内部的数据根据员工表删除操作做记录

*/

create trigger trg_empoff

after DELETE

on employee

for each ROW

BEGIN

#new  old

insert into emp_off(num,name,tel,email,depno,birth) values(old.num,old.name,old.tel,old.email,old.depno,old.birth);

end;

 

 

/*

创建一个触发器,在员工表上,做修改操作之前,将原来记录行以及修改后的记录数据存储到另一个表中

*/

create trigger trg_modify

before UPDATE

on employee

for each ROW

BEGIN

#添加老数据

insert into emp_temp(num,name,tel,depno,bak) values(old.num,old.name,old.tel,old.depno,'old data');

#添加新数据

insert into emp_temp(num,name,tel,depno,bak) values(new.num,new.name,new.tel,new.depno,'new data');

end

 

/*

利用触发器解除约束关系

为部门表添加触发器,当删除部门表中记录时,修改员工表关联当前部门,将员工的部门设置为null

*/

create trigger trg_del_dept

before DELETE

on department

for each ROW

BEGIN

update employee set depno=null where depno=old.depno;

end;

你可能感兴趣的:(MySQL)