app开发者平台在数字化时代的重要性与发展趋势解析
1167
2022-11-21
Mysql数据库-触发器
4. Mysql数据库-触发器
4.1 触发器概述
1. 触发器(trigger)是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。2. 触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。3. 使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。
# 举例 1. 地雷(触发器) : 是要有人触发它的引爆机制, 它才会爆炸 2. 根据触发机制的不同: insert/update/delete
4.1.1 触发器解释
1595944780499
在上面的对于 account 表的 增删改操作中,我们可以使用触发器对其操作进行记录,将操作的日志记录到 account_log 表中。
4.1.2 触发器类型
1595944012882
4.2 创建触发器
4.2.1 语法说明
语法:
执行示例:
4.2.2 创建示例
示例:
需求: 通过触发器记录 account 表的数据变更日志 , 包含增加, 修改 , 删除 ;
-- 数据准备-- 创建账户表accountcreate table account( id int primary key auto_increment, name varchar(20), money double);insert into account values(null,'张三',1000),(null,'李四',1000);-- 创建日志表account_logcreate table account_log( id int(11) primary key auto_increment, -- 日志id operation varchar(20), -- 操作类型(insert/update/delete) operation_time datetime, -- 操作时间 operation_id int, -- 操作表的ID operation_params varchar(500) -- 操作参数);
执行如下:
-- 查询account表的数据mysql> select * from account;+----+--------+-------+| id | name | money |+----+--------+-------+| 1 | 张三 | 1000 || 2 | 李四 | 1000 |+----+--------+-------+2 rows in set (0.01 sec)-- 查询account_log日志表数据mysql> select * from account_log;Empty set (0.00 sec)
创建 insert 型触发器,完成插入数据时的日志记录 :
测试如下:
-- 查看当前的account表数据mysql> select * from account;+----+--------+-------+| id | name | money |+----+--------+-------+| 1 | 张三 | 1000 || 2 | 李四 | 1000 |+----+--------+-------+2 rows in set (0.00 sec)-- 查看当前account_log表数据mysql> select * from account_log;Empty set (0.00 sec)-- 往account表插入一条数据,触发 触发器 account_insertmysql> insert into account values(null,'王五',2000);Query OK, 1 row affected (0.01 sec)-- 查看account_log中由触发器生成的数据mysql> select * from account_log;+----+-----------+---------------------+--------------+---------------------------------------+| id | operation | operation_time | operation_id | operation_params |+----+-----------+---------------------+--------------+---------------------------------------+| 1 | insert | 2021-02-13 17:20:07 | 3 | 插入后(id=3,name=王五,money=2000 |+----+-----------+---------------------+--------------+---------------------------------------+1 row in set (0.00 sec)mysql>
创建 update 型触发器,完成更新数据时的日志记录 :
测试如下:
image-20210213173450823
创建 delete 型的触发器 , 完成删除数据时的日志记录 :
测试如下:
image-20210213173909177
扩展 : 创建 insert-before 触发器
测试如下:
image-20210213175554450
4.3 查看触发器
-- 可以通过执行 SHOW TRIGGERS 命令查看触发器的状态、语法等信息。show triggers ;
1595949829255
# 解释1. trigger: 触发器名2. event : 监听的事件 (引爆机制)3. table : 监听的表4. statement : 触发器语句(begin和end之间的内容)5. timing : 时机
4.4 删除触发器
--语法drop trigger 触发器名;-- 删除account_delete触发器drop trigger account_delete;
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~