触发器的介绍:
触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。
触发器的类型:
INSERT 型触发器
UPDATE 型触发器
DELETE 型触发器
创建触发器
DELIMITER $
CREATE TRIGGER 名称
事件前后(after\bdfore) 触发器类型(insert\update\delete)
ON 对象表
FOR EACH ROW
BEGIN
执行语句
END$DELIMITER ;
数据准备:
-- 创建数据库 CREATE DATABASE db3; -- 创建syudent表 CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (20), money DOUBLE ); -- 添加数据 INSERT INTO student VALUE (NULL, '张三', 1000); INSERT INTO student VALUE (NULL, '李四', 30000); INSERT INTO student VALUE (NULL, '王五', 4000); INSERT INTO student VALUE (NULL, '赵六', 3500); INSERT INTO student VALUE (NULL, '老八', 12000); -- 查询stduent SELECT * FROM student; -- 创建日志表 用来记录事件 CREATE TABLE account_log( id INT PRIMARY KEY AUTO_INCREMENT, -- 日志id opration VARCHAR(20), -- 操作类型(insert、update、delete) opration_time DATETIME, -- 操作时间 opration_id INT, -- 操作表的id opration_params VARCHAR(200) -- 操作参数 );
查看结果:
一、INSERT 型触发器
-- 创建insert型触发器 DELIMITER $ CREATE TRIGGER account_insert AFTER INSERT ON student FOR EACH ROW BEGIN INSERT INTO account_log VALUE(NULL,'INSERT',NOW(),new.id,CONCAT('插入后{id=',new.id,',name=',new.name,',money=',new.money,'}')); END$ DELIMITER ; -- 向studen添加数据 INSERT INTO student VALUE(NULL,'七七',3000); -- 查询account_log日志 SELECT * FROM account_log;
new.id 获取事件触发后的对象表的id
查看结果:
二、UPDATE 型触发器
-- 创建update型触发器 DELIMITER $ CREATE TRIGGER account_update AFTER UPDATE ON student FOR EACH ROW BEGIN INSERT INTO account_log VALUE(NULL,'UPDATE',NOW(),new.id,CONCAT('更新前{id=',old.id,',name=',old.name,',money=',old.money,'}, 更新后{id=,',new.id,',name=',new.name,',money=',new.money,'}')); END$ DELIMITER ; -- 修改student数据 UPDATE student SET money=10 WHERE id=2; -- 查询account_log日志 SELECT * FROM account_log;
old.id 获取事件触发前的对象表的id
查看结果:
三、DELETE 型触发器
-- 创建delete型触发器 DELIMITER $ CREATE TRIGGER account_delete AFTER DELETE ON student FOR EACH ROW BEGIN INSERT INTO account_log VALUE(NULL,'DELETE',NOW(),old.id,CONCAT('删除{id=',old.id,',name=',old.name,',money=',old.money,'},')); END$ DELIMITER ; -- 修改student数据 DELETE FROM student WHERE id=5; -- 查询account_log日志 SELECT * FROM account_log;
查看结果:
四、查看与删除触发器
-- 查看触发器 SHOW TRIGGERS; -- 删除触发器 DROP TRIGGER IF EXISTS account_inset;
或者右键刷新触发器条目 \ 右键删除触发器