Mysql数据库-触发器

网友投稿 1167 2022-11-21

Mysql数据库-触发器

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小时内删除侵权内容。

上一篇:springdata jpa使用Example快速实现动态查询功能
下一篇:6. Mybatis映射文件深入 - 新增数据后返回主键ID - 动态SQL - SQL片段
相关文章

 发表评论

暂时没有评论,来抢沙发吧~