mysql手册06_触发器
mysql手册06_触发器
触发器指在数据库 增删改前后 触发并执行的一段 SQL语句集合
触发器可以确保 数据完整性,进行 日志记录 和 数据校验
触发器使用 NEW 和 OLD 来引用触发器中发生变化的记录内容
MySQL 只支持 行级触发器 ,不支持语句级触发器
触发器类型 | NEW和OLD的用法 |
---|---|
insert型触发器 | NEW表示将要或已经新增的数据 |
update型触发器 | NEW表示将要或已经修改的数据,OLD表示修改之前的数据 |
delete型触发器 | OLD表示将要或已经删除的数据 |
创建触发器:
通过触发器记录emp表的数据变更日志,包含增删改:首先创建日志表:
create table emp_logs(id int(11) not null auto_increment,operation varchar(20) not null comment '操作类型',operate_time datetime not null comment '操作时间',operate_id int(11) not null comment '操作表的ID',operate_params varchar(500) comment '操作参数',primary key(id)
)engine=innodb default charset=utf8;创建insert触发器:
create trigger emp_insert_trigger
after insert
on emp
for each row
begininsert into emp_logs values(null,'insert',now(),new.id,concat('插入数据(id:',new.id,', name:',new.name,', age:',new.age,', salary:',new.salary,')'));
end$测试insert:
insert into emp values(null,'光明左使',30,3500);select * from emp_logs;
+----+-----------+---------------------+------------+--------------------------------------------------------------+
| id | operation | operate_time | operate_id | operate_params |
+----+-----------+---------------------+------------+--------------------------------------------------------------+
| 1 | insert | 2020-08-15 15:10:02 | 5 | 插入数据(id:5, name:光明左使, age:30, salary:3500) |
+----+-----------+---------------------+------------+--------------------------------------------------------------+创建update触发器:
create trigger emp_update_trigger
after update
on emp
for each row
begininsert into emp_logs values(null,'update',now(),new.id,concat('修改前数据(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,')','修改后数据(id:',new.id,', name:',new.name,', age:',new.age,', salary:',new.salary,')'));
end$测试update:
update emp set age=39 where id=3;select * from emp_logs;
+----+-----------+---------------------+------------+------------------------------------------------------------------------------------------------------------------------------+
| id | operation | operate_time | operate_id | operate_params |
+----+-----------+---------------------+------------+------------------------------------------------------------------------------------------------------------------------------+
| 1 | insert | 2020-08-15 15:10:02 | 5 | 插入数据(id:5, name:光明左使, age:30, salary:3500) |
| 2 | update | 2020-08-15 15:19:34 | 3 | 修改前数据(id:3, name:青翼蝠王, age:38, salary:2800)修改后数据(id:3, name:青翼蝠王, age:39, salary:2800) |
+----+-----------+---------------------+------------+------------------------------------------------------------------------------------------------------------------------------+创建delete触发器:
create trigger emp_delete_trigger
after delete
on emp
for each row
begininsert into emp_logs values(null,'delete',now(),old.id,concat('删除数据(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,')'));
end$测试delete:
delete from emp where id = 5;select * from emp_logs;
+----+-----------+---------------------+------------+------------------------------------------------------------------------------------------------------------------------------+
| id | operation | operate_time | operate_id | operate_params |
+----+-----------+---------------------+------------+------------------------------------------------------------------------------------------------------------------------------+
| 1 | insert | 2020-08-15 15:10:02 | 5 | 插入数据(id:5, name:光明左使, age:30, salary:3500) |
| 2 | update | 2020-08-15 15:19:34 | 3 | 修改前数据(id:3, name:青翼蝠王, age:38, salary:2800)修改后数据(id:3, name:青翼蝠王, age:39, salary:2800) |
| 3 | delete | 2020-08-15 15:24:46 | 5 | 删除数据(id:5, name:光明左使, age:30, salary:3500) |
+----+-----------+---------------------+------------+------------------------------------------------------------------------------------------------------------------------------+
查看触发器:
show triggers\G;*************************** 1. row ***************************Trigger: emp_insert_triggerEvent: INSERTTable: empStatement: begin
insert into emp_logs values(null,'insert',now(),new.id,concat('插入数据(id:',new.id,', name:',new.name,', age:',new.age,', salary:',new.salary,')'));
endTiming: AFTERCreated: 2020-08-15 15:08:11.22sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTIONDefiner: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ciDatabase Collation: utf8mb4_0900_ai_ci
*************************** 2. row ***************************Trigger: emp_update_triggerEvent: UPDATETable: empStatement: begin
insert into emp_logs values(null,'update',now(),new.id,concat('修改前数据(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,')','修改后数据(id:',new.id,', name:',new.name,', age:',new.age,', salary:',new.salary,')'));
endTiming: AFTERCreated: 2020-08-15 15:18:29.05sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTIONDefiner: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ciDatabase Collation: utf8mb4_0900_ai_ci
*************************** 3. row ***************************Trigger: emp_delete_triggerEvent: DELETETable: empStatement: begin
insert into emp_logs values(null,'delete',now(),old.id,concat('删除数据(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,')'));
endTiming: AFTERCreated: 2020-08-15 15:23:47.56sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTIONDefiner: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ciDatabase Collation: utf8mb4_0900_ai_ci
3 rows in set (0.00 sec)
删除触发器:
drop trigger emp_delete_trigger;
mysql手册06_触发器相关推荐
- mysql latid1_mysql数据库触发器详解-阿里云开发者社区
1. 引言 Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...
- mysql数据库触发器失效,mysql 的数据库触发器解决方法
mysql 的数据库触发器 我要做一个数据库触发器,当删除数据库中的某一张表的时候触发这个一个事件,删除其他表中的某一些数据. 大家给个例子 ------解决方案------------------- ...
- Mysql高级之触发器
原文:Mysql高级之触发器 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete). 看以下事件: 完 ...
- mysql创建删除触发器的时候_mysql触发器简介及如何创建和删除触发器
什么是mysql触发器 需要MySQL 5 对触发器的支持是在MySQL 5中增加的.因此,本章内容适用于MySQL 5或之后的版本. MySQL语句在需要时被执行,存储过程也是如此.但是,如果你想要 ...
- mysql 动态传入表名 存储过程_面试再问MySQL存储过程和触发器就把这篇文章给他...
Mysql存储过程及触发器trigger 存储过程 一.一个简单的存储过程 1,一个简单的存储过程 delimiter $$create procedure testa()begin Select * ...
- oracle触发器比较,Oracle使用触发器和mysql中使用触发器的比较
一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志, ...
- MySQL的学习--触发器
转载自https://www.cnblogs.com/CraryPrimitiveMan/p/4206942.html MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在 ...
- mysql查看所有触发器以及存储过程等操作集合
1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND TAB ...
- Mysql 脚本创建触发器报错 1064 42000
关于:使用sql脚本在mysql中创建触发器时报错: 解决方法:加入定界符
- mysql schema 保存数据_在MySQL中,所有触发器的定义都保存在information_schema数据库下的()表中。_学小易找答案...
[单选题]如何将英制 的零件转为公制的零件 ( ). [判断题]连续选择边线创建倒角时,不能单独修改某一边线的倒角大小 [判断题]创建筋特征时截面必须是闭和的 [填空题]Hibernate 的会话接口 ...
最新文章
- 多人开源博客系统再搜集
- shell 数组排序
- Mybatis分页插件更新
- 广东计算机好的2a学校,广东专插本2A院校排名情况
- 4 文件操作 支持图片 视频 mp3 文本等
- AI又被彩虹吹?!新浪财经:应届博士算法毕业,80万年薪被疯抢
- 《深入理解Java虚拟机》——垃圾收集器的具体实现
- 经典的 div + css 鼠标 hover 下拉菜单
- Redis 快速入门 -- Redis 命令(6)
- windows10安装AWVS
- ADMM算法(交替方向乘子法)
- 深度学习GPU最全对比,到底谁才是性价比之王?
- 美区苹果id绑定QQ邮箱教程
- 边沿触发是什么意思_epoll 水平触发 边沿触发
- 《国际名酒知识与品鉴》学习笔记
- 角色攻击、角色特殊动作
- Vue动态设置路由title
- 用c语言给8051编程,8051单片机的C语言编程
- 在Linux中压缩/解压缩文件
- linux运维拾忆2