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';
本文出自 “攻城狮” 博客,转载请与作者联系!