Mysql 触发器 trigger 是针对数据库操作语句DML而言的,严格上来说,SQL语句是分为DQL和DML的,有些地方把这两者都划到了一起,但是如果区别来看,理解触发器trigger则更简单。

举例:

1 登录某个系统后,如果修改相应的账户信息,则自动发一个确认信息通知用户本人防止恶意操作。

2 注册用户的时候自动发一个激活邮件到对方的邮箱,当对方点击邮件则激活该账户。

3 商城购买东西一件东西之后,那么商品数量自动减一。


根据例子分析:上面我们可以利用Mysql定义一个触发器,触发器可以再一个操作之前或者之后执行。


DML语句:

insert

delete

update

Mysql的触发器是在版本5之后开始支持的,当然目前而言除非特别老的项目,我估计也没有使用Mysql5.0之下的了。

Mysql只有表才支持触发器,视图并不支持,它不是真实的表。


Drop trigger xxxName;//删除触发器


一次定义终身使用,如果想要更改触发器的内容,则必须删除再重新创建。


按照每个表 每个事件 每次 定义触发器。

之前 before

之后 after

因此一个表最多可以定义6个触发器。

一个触发器只能对应一个事件。

触发器例子:


1 after insert trigger

drop table if EXISTS table1;

create table table1(

 table1_id varchar(11)

);

create table table2(

 table2_id VARCHAR(11)

);

create TRIGGER t_afterinsert_on_table1

AFTER INSERT on table1

for each row 

BEGIN

   insert into table2(table2_id) values (new.table1_id);

end;


insert into table1(table1_id) values('001');

SELECT * from table1;

select * from table2;


2 after delete trigger


insert into table1(table2_id) values('001'); 

insert into table2(table2_id) values('001'); 


drop trigger t_afterdelete_on_table1;


create TRIGGER t_afterdelete_on_table1

after DELETE on table1

for each ROW

BEGIN

  DELETE from table2 where table2_id =old.table1.id;

END;


delete from table1 where table1_id ='001';



3  after update trigger   old表 是更新以前的数据, new表示更新后的数据

   

create table table3(

userName VARCHAR(10)

);

desc table3;

create TRIGGER beforeupdateUser 

BEFORE UPDATE ON table3

for each row 

BEGIN

set New.userName=UPPER(New.userName);

END;

SELECT * from table3;

insert into table3(userName) values('kevin');

update table3 set userName ='tom';