您的位置:首页 > 数据库 > MySQL

Mysql触发器

2015-06-12 18:32 615 查看
一、概述

触发器主要用于监听某个表的insert,update以及delete等更新操作,这些操作一旦被执行,可以激活该表的触发程序如insert,update,delete等命令,实现数据维护。

二、功能

功能:

实现检查约束,对字段范围检查约束

维护冗余数据,保证数据的一致性

模拟外键级联选项,在表中外键的功能

三、语法格式

create trigger 触发器名 触发时间 触发事件 on 表名 for each row

begin

触发程序

end;

触发时间有before和after

before 表示在触发事件发生之前执行触发程序

after 表示在触发事件发生之后执行触发程序

触发事件有insert,update,delete

for each row表示行级触发触发器

new和old

new代表修改后的新纪录

old代表旧纪录,只能读

注意要点

1.创建触发器必须指定触发器属于哪个数据库

2.触发器不能产生结果集

3.同一个表不能创建两个相同的触发事件,触发时间的触发程序

四、举例

先说明delimiter的使用

delimiter //和delimiter
;两句,delimiter 是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,因此用这个命令转换一下";"为“//”,这样只有收到“//”才认为指令结束可以执行,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

1.实现检查约束

delimiter //

create trigger test_trigger before insert on couser for each row

begin

if(age>60) then

insert into falsetable values(0);

else

set new.age=old.age;

end; 

//

delimiter ;

2.维护冗余数据

delimiter //

create trigger test before insert on student for each row

begin

update student set count=count+1 where new.no=old.no;

end;

//

delimiter ;

3.模拟外键级联选项

delimiter //

create trigger test before deleteon student for each row

begin

delete from student where age>old.no;

end;

//

delimiter;

delete from student  where age=18;

五、对触发器的操作

查看触发器的定义

查看但前所有触发器

show triggers\G

查看指定触发器

show create trigger test\G

删除触发器

drop trigger 触发器名;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: