概念
触发器是一种特殊的事务,它监听增删改操作,并触发增删改操作。主要是用来处理一些比较复杂的业务逻辑以保证数据的联动性。其包含了四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)
语法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
FOR EACH ROW 用来标识触发器的类型,因为MySQL支持行级别的触发器,不支持语句触发器,故只能使用FOR EACH ROW 。因为触发器中使用’;’区分多个事件语句,故需要重新定义定界符。
创建表
table1
DROP TABLE IF EXISTS tab1;
CREATE TABLE tab1(
tab1_id varchar(11)
);
table2
DROP TABLE IF EXISTS tab2;
CREATE TABLE tab2(
tab2_id varchar(11)
);
实例
example1:
创建触发器:t_afterinsert_on_tab1
作用:增加tab1表记录后自动将记录增加到tab2表中
DROP TRIGGER IF EXISTS t_afterinsert_on_tab1;
CREATE TRIGGER t_afterinsert_on_tab1
AFTER INSERT ON tab1
FOR EACH ROW
BEGIN
insert into tab2(tab2_id) values(new.tab1_id);
END;
测试一下
INSERT INTO tab1(tab1_id) values('0001');
看看结果
SELECT * FROM tab1;
SELECT * FROM tab2;
example2:
创建触发器:t_afterdelete_on_tab1
作用:删除tab1表记录后自动将tab2表中对应的记录删去
DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;
CREATE TRIGGER t_afterdelete_on_tab1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
delete from tab2 where tab2_id=old.tab1_id;
END;
测试一下
DELETE FROM tab1 WHERE tab1_id='0001';
看看 结果
SELECT * FROM tab1;
SELECT * FROM tab2;
注意:当触发器和存贮过程交互的调用某一个字段的时候会出现这个报错mysql error 1142