概述
目录
介绍
介绍
触发器分类
insert型触发器
创建触发器
实例操作
update型触发器
实例操作
delete型触发器
实例操作
查看和删除触发器
实例操作
-
介绍
-
介绍
- 触发器是与表有关的数据库对象
- 可以在insert,update,delete之前或之后触发并执行触发器中定义的SQL语句
- 这种特性可以协助应用系统在数据库端确保数据的完整性,日志记录,数据校验等操作
- 通过使用别名NEW和OLD来引用触发器中发生变化的内容记录
-
触发器分类
- insert型触发器
- OLD:无(因为插入前无数据)
- NEW:NEW表示将要或者已经新增的数据
- update型触发器
- OLD:OLD表示修改之前的数据
- NEW:NEW表示将要或者已经修改后的数据
- delete型触发器
- OLD:OLD表示将要或者已经删除的数据
- NEW:无(因为删除后状态无数据)
-
insert型触发器
-
创建触发器
- delimiter $
- create trigger 触发器名称
- before|after insert|update|delete
- on 表名
- for each row
- begin
- 触发器要执行的功能;
- end$
- delimiter ;
-
实例操作
-
CREATE TABLE account( id INT PRIMARY KEY auto_increment, -- 账户id name varchar(20), -- 姓名 money DOUBLE -- 余额 ); -- 添加数据 INSERT INTO account VALUES (NULL,'张三',1000),(NULL,'李四',1000); -- 创建日志表account_log CREATE TABLE account_log ( id INT PRIMARY KEY auto_increment, -- 日志id operation VARCHAR(20), -- 操作类型(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,'money=',new.money,'}')); END$ delimiter ; -- 向account表添加一条记录 INSERT INTO account VALUES (NULL,'王五',2000); -- 查询account表 SELECT * FROM account;
-
CREATE TABLE account( id INT PRIMARY KEY auto_increment, -- 账户id name varchar(20), -- 姓名 money DOUBLE -- 余额 ); -- 添加数据 INSERT INTO account VALUES (NULL,'张三',1000),(NULL,'李四',1000); -- 创建日志表account_log CREATE TABLE account_log ( id INT PRIMARY KEY auto_increment, -- 日志id operation VARCHAR(20), -- 操作类型(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 ; -- 向account表添加一条记录 INSERT INTO account VALUES (NULL,'王五',2000); -- 查询account_log表 SELECT * FROM account_log;
-
update型触发器
- 创建触发器方式与insert一样
-
实例操作
-
CREATE TABLE account( id INT PRIMARY KEY auto_increment, -- 账户id name varchar(20), -- 姓名 money DOUBLE -- 余额 ); -- 添加数据 INSERT INTO account VALUES (NULL,'张三',1000),(NULL,'李四',1000); -- 创建日志表account_log CREATE TABLE account_log ( id INT PRIMARY KEY auto_increment, -- 日志id operation VARCHAR(20), -- 操作类型(insert,update,delete) operation_time datetime, -- 操作时间 operation_id INT, -- 操作表的id operation_params VARCHAR(200) -- 操作参数 ); -- 创建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 ; -- 修改account表中李四的金额为2000 UPDATE account SET money=2000 WHERE id=2; -- 查询account表 SELECT * FROM account;
-
CREATE TABLE account( id INT PRIMARY KEY auto_increment, -- 账户id name varchar(20), -- 姓名 money DOUBLE -- 余额 ); -- 添加数据 INSERT INTO account VALUES (NULL,'张三',1000),(NULL,'李四',1000); -- 创建日志表account_log CREATE TABLE account_log ( id INT PRIMARY KEY auto_increment, -- 日志id operation VARCHAR(20), -- 操作类型(insert,update,delete) operation_time datetime, -- 操作时间 operation_id INT, -- 操作表的id operation_params VARCHAR(200) -- 操作参数 ); -- 创建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 ; -- 修改account表中李四的金额为2000 UPDATE account SET money=2000 WHERE id=2; -- 查询account_log表 SELECT * FROM account_log;
-
delete型触发器
-
实例操作
-
CREATE TABLE account( id INT PRIMARY KEY auto_increment, -- 账户id name varchar(20), -- 姓名 money DOUBLE -- 余额 ); -- 添加数据 INSERT INTO account VALUES (NULL,'张三',1000),(NULL,'李四',1000); -- 创建日志表account_log CREATE TABLE account_log ( id INT PRIMARY KEY auto_increment, -- 日志id operation VARCHAR(20), -- 操作类型(insert,update,delete) operation_time datetime, -- 操作时间 operation_id INT, -- 操作表的id operation_params VARCHAR(200) -- 操作参数 ); -- 创建delete型触发器,用于对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 ; -- 删除account表中李四 DELETE FROM account WHERE id=2; -- 查询account表 SELECT * FROM account;
-
CREATE TABLE account( id INT PRIMARY KEY auto_increment, -- 账户id name varchar(20), -- 姓名 money DOUBLE -- 余额 ); -- 添加数据 INSERT INTO account VALUES (NULL,'张三',1000),(NULL,'李四',1000); -- 创建日志表account_log CREATE TABLE account_log ( id INT PRIMARY KEY auto_increment, -- 日志id operation VARCHAR(20), -- 操作类型(insert,update,delete) operation_time datetime, -- 操作时间 operation_id INT, -- 操作表的id operation_params VARCHAR(200) -- 操作参数 ); -- 创建delete型触发器,用于对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 ; -- 删除account表中李四 DELETE FROM account WHERE id=2; -- 查询account_log表 SELECT * FROM account_log;
-
查看和删除触发器
- 查看触发器
- show triggers;
- 删除触发器
- drop trigger 触发器名称;
-
实例操作
-
-- 查看触发器 SHOW TRIGGERS;
最后
以上就是坚定香菇为你收集整理的SQL触发器的全部内容,希望文章能够帮你解决SQL触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复