触发器介绍
- 触发器是与表有关的数据对象, 可以在insert ,update ,delete 之前或之后触发并执行触发器中定义的SQL语句.
- 这种特性可以协助应用系统在数据库端确保数据的完整性,日志记录,数据校验等操作
- 使用别名NEW 和 OLD来引用触发器中发生变化的内容记录
触发器分类
触发器分类.png
触发器的操作
- 创建触发器
DELIMITER $
CREATE TRIGGER 触发器名称
BEFPRE | AFTER INSTER | UPDATE | DELETE
ON 表名
FOR EACH ROW
BEGIN
触发器要执行的功能
END$
DELIMITER ;
触发器的操作
- 查看触发器
SHOW TRIGGER;- 删除触发器
DROP TRIGGER 触发器名称;
SQLYog语句
-- 自行创建测试表 account
-- 创建日志表account_log
CREATE TABLE account_log(
id INT PRIMARY KEY AUTO_INCREMENT, -- 日志id
operation VARCHAR(10), -- 操作类型(insert,update,delete)
operation_time DATETIME, -- 操作时间
operation_id INT, -- 操作表的id
operation_params VARCHAR(200) -- 操作参数
);
/*创建insert 类型触发器,用于对account表新增数据进行日志的记录*/
DELIMITER $
CREATE TRIGGER account_insert
AFTER INSERT
ON account
FOR EACH ROW
BEGIN
INSERT INTO account_log VALUES (NULL,'INSERT',NOW(),new.id,CONCAT('插入后{id=',new.id,',name=',new.name,',money=',new.money,'}'));
END$
DELIMITER ;
-- 测试插入数据
INSERT INTO account VALUES (NULL,'赵六',2000);
-- 查询
SELECT * FROM account;
-- 查询account_log 的日志记录
SELECT * FROM account_log;
/*创建update 类型触发器,用于对account表修改数据进行日志的记录*/
DELIMITER $
CREATE TRIGGER account_update
AFTER UPDATE
ON account
FOR EACH ROW
BEGIN
INSERT INTO account_log VALUES (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 ;
-- 测试更新数据
UPDATE account SET money=1500 WHERE NAME='张三';
-- 查看触发器日志
SELECT * FROM account_log;
/*
创建update 类型触发器,用于对account表删除数据进行日志的记录
*/
DELIMITER $
CREATE TRIGGER account_delete
AFTER DELETE
ON account
FOR EACH ROW
BEGIN
INSERT INTO account_log VALUES (NULL,'DELETE',NOW(),old.id,CONCAT('删除前{id=',old.id,',name=',old.name,',money=',old.money,'}'));
END$
DELIMITER ;
-- 测试删除数据
DELETE FROM account WHERE NAME='赵六';
-- 查看触发器日志
SELECT * FROM account_log;
/*查看和删除触发器*/
-- 查看触发器
SHOW TRIGGERS;
-- 删除触发器 account_delete
DROP TRIGGER account_delete;
SELECT * FROM account_log;
测试结果.png