触发器
本系列内容基本上是从一本叫做《Mysql入门很简单》上面整理的。如果侵犯了你的权益,告诉我,我删掉!
一、触发器的基础
触发器(TRIGGER)是由事件来触发某个操作,包括INSERT、UPDATE和DELETE。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。
二、基础操作
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
执行语句 ---单个执行语句
--------------------
CREATE TRIGGER dept_trig1 BEFORE INSERT ---当向department表执行INSERT时,数据库系统都会在INSERT语句执行之前向trigger_time表插入当前时间
ON department FOR EACH ROW
INSERT INTO trigger_time VALUES(NOW());
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN ---多个执行语句
执行语句列表
END
-------------------
DELIMITER &&
CREATE TRIGGER dept_trig2 AFTER DELETE
ON department FOR EACH ROW
BEGIN
INSERT INTO trigger time VALUES('21:01:01');
INSERT INTO trigger time VALUES('22:01:01');
END
&&
DELIMITER ;
三、查看触发器
SHOW TRIGGERS --查看所有触发器信息
SELECT * FROM information_schema.triggers; --在information_schema的triggers中查看所有触发器详细信息
四、删掉触发器
DROP TRIGGER 触发器名;
-----------------
DROP TRIGGER dept_trig1;
五、触发器实例
//创建BEFORE INSERT触发器
CREATE TRIGGER before insert BEFORE
INSERT ON department FOR EACH ROW
INSERT INTO trigger_test VALUES(null, ”before_ insert ");
//创建AFTER INSERT触发器
CREATE TRIGGER after insert AFTER INSERT
ON department FOR EACH ROW
INSERT INTO trigger_test VALUES(null,”after insert ");
//触发器都创建好以后,向department表中插入一条记录。
INSERT INTO department VALUES(1003,'销售部",负责产品销售1号楼销售大厅');
//查询结果
SELECT * FROM trigger test;
--查询结果显示,before_insert和after_insert 触发器被激活。
--先激活before_insert 触发器,然后再激活after_insert 触发器。
注意:
在激活触发器时,对触发器中的执行语句存在一些限制。例如,触发器中不能包含START TRANSACTION、COMMIT或ROLLBACK等关键词,也不能包含CALL语句。
在触发器执行过程中,任何步骤出错都会阻止程序向下执行。
但是对于普通表来说,已经更新过的记录是不能回滚的。
更新后的数据将继续保持在表中。因此,设计触发器时要认真考虑。
六、删掉触发器
DROP TRIGGER 触发器名;
-----
DROP TRIGGER dept_trig1;