0
点赞
收藏
分享

微信扫一扫

mysql的触发器

程序员阿狸 2022-07-27 阅读 144

什么是触发器

触发器是与表有关的数据库对象,可以在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句。触发器的这种特性可以协助应用在数据库端确保数据的完整性 、日志记录 、数据校验等操作 。使用别名 NEW 和 OLD 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。

mysql的触发器_触发器

 

 

解读:很多人看上面的触发器概念介绍,感觉还是很蒙圈,触发器简单的来说就是我们对数据库中的某一张表进行添加、修改或者删除的时候、就会触发我们对应的操作。

 

创建触发器

DELIMITER $
CREATE TRIGGER 触发器名称
BEFORE|AFTER INSERT|UPDATE|DELETE
ON 表名
[FOR EACH ROW] -- 行级触发器
BEGIN
触发器要执行的功能;
END$
DELIMITER ;

 

解读:

BEFORE|AFTER 表示是在操作之前还操作之后触发

INSERT|UPDATE|DELETE  是添加、修改、删除的意思

ON 表名 表示是对哪一张表进行添加、修改或者删除的时候触发我们要的操作

 

需求:

我这里有一张学生表:student和一张日志操作表:student_log,如果有人对student进行了添加、修改或者删除,我们就把这些操作的记录记录到

student_log表中。

 

学生表:

mysql的触发器_触发器_02

 

 

操作日志表:

mysql的触发器_数据库_03

 

 

操作日志记录的效果图:

mysql的触发器_触发器_04

 

 

解读:

第1行:INSERT是表示添加,表示对student进行新增来一条数据,表的id是3,新增的内容是什么什么
第2行:UPDATE表示是修改,表示对student进行了内容修改,修改的id是1,修改的内容有,修改前怎么样,修改后怎么样。

代码实现

1、创建表

学生表:
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT, -- 学生id
NAME VARCHAR(20), -- 学生姓名
age INT, -- 学生年龄
gender VARCHAR(5), -- 学生性别
score INT -- 学生成绩
);

日志表:
CREATE TABLE student_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类型的触发器

mysql的触发器_数据_05

 

 

now();获取的是当前的系统时间
concat( ) ;是字符串拼接函数

 

创建UPDATE类型的触发器

mysql的触发器_数据库_06

 

 

创建DELETE类型的触发器

mysql的触发器_数据库_07

 

 

查看触发器

SHOW TRIGGERS;

 

删除触发器

DROP TRIGGER

 

触发器的总结

1、触发器是与表有关的数据库对象

2、可以在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句

3、触发器的这种特性可以协助应用在数据库端确保数据的完整性 、日志记录 、数据校验等操作

4、使用别名 NEW 和 OLD 来引用触发器中发生变化的记录内容



举报

相关推荐

0 条评论