使用触发器对学生表操作进行日志记录

Posted 方觉夏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用触发器对学生表操作进行日志记录相关的知识,希望对你有一定的参考价值。

项目介绍

触发器,就是一种特殊的存储过程,触发器和存储过程一样是一个能够完成特定功能,存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用。
学生信息表(stu):记录学生了的学号,姓名,性别,年龄


日志信息表(stu_log):记录对学生信息的操作(记录在xx时间对xx学生进行了xx操作)

当向stu表中进行增加删除修改学生信息时,同时要在stu_log表中添加一条操作日志

1、NEW与OLD关键字介绍

触发器用于监听对数据表中数据的insert,delete,update操作,在触发器中通常处理一些DML的关联操作
我们可以使用’new’和’old’关键字在触发器中获取触发这个触发器的DML操作的数据
new:用于获取insert操作添加的数据,update修改后的数据
old:在触发器中用于获取delete操作删除前的数据,update修改前的数据
接下来我们在创建触发器的时候,就可以充分使用这两个关键字对学生表信息进行关联获取。

2、创建触发器

我们需要创建三个触发器,分别执行用户对学生表(stu)进行增加,修改,删除操作时进行自动记录。

2.1增加学生信息的触发器

CREATE TRIGGER stu_tri_insert
AFTER INSERT ON stu 
FOR EACH ROW 
INSERT INTO stu_log(TIME,log_text) VALUE(NOW(),CONCAT('添加',new.stu_name,'学生信息'))

2.2修改学生信息的触发器

CREATE TRIGGER stu_tri_update
AFTER UPDATE ON stu 
FOR EACH ROW 
INSERT INTO stu_log(TIME,log_text) VALUE(NOW(),CONCAT('[','进行了修改操作',']','修改前为:',old.stu_name,' ','修改后为:',new.stu_name))

2.3删除学生信息的触发器

CREATE TRIGGER stu_tri_delete
AFTER DELETE ON stu
FOR EACH ROW 
INSERT INTO stu_log(TIME,log_text) VALUE(NOW(),CONCAT('删除的学生信息为',old.stu_name))

2.4查看触发器

SHOW TRIGGERS

stu_tri_insert,stu_tri_update,stu_tri_delete三个触发器分别对应着用户对学生表(stu)执行增删改操作时,会添加进日志信息表(stu_log)的信息。

3、最终实现效果

3.1当对学生表(stu)执行插入操作时


触发器的操作被自动执行,日志信息表(stu_log)新增了学生表(stu)所执行的添加操作记录

3.2当对学生表(stu)执行修改操作时


触发器的操作被自动执行,日志信息表(stu_log)新增了学生表(stu)所执行的修改操作记录

3.3当对学生表(stu)执行删除操作时


触发器的操作被自动执行,日志信息表(stu_log)新增了学生表(stu)所执行的删除操作记录

4、文中出现的增删改SQL语句

INSERT INTO stu(stu_num,stu_name,stu_gender,stu_age) VALUES(1005,'夏北','女',25);
UPDATE stu SET stu_name='夏南' WHERE stu_num = 1005
DELETE FROM stu WHERE stu_num = 1005

以上是关于使用触发器对学生表操作进行日志记录的主要内容,如果未能解决你的问题,请参考以下文章

mysql触发器学习

[生产库实战] 如何使用触发器对生产库上亿级大表进行实时同步

MySQL 使用触发器记录用户的操作日志

Oracle数据库之触发器

常用python日期日志获取内容循环的代码片段

java能够实现对数据库的监听吗