MySql触发器技术

1.创建一个测试表学生表stu,和一个用来记录触发器日志的表stu_log

CREATE TABLE stu(
 id INT PRIMARY KEY  AUTO_INCREMENT,
 stuname VARCHAR(10),
 stuage INT,
 stunumber VARCHAR(6) UNIQUE 
);
CREATE TABLE stu_log(
id INT PRIMARY KEY AUTO_INCREMENT,
dowhat VARCHAR (10),
dotime DATE,
newdata VARCHAR(100),
olddata VARCHAR(100)
);

2.为学生表创建一个插入事件的触发器
这里我们需要思考一下,对于插入事件,数据表中插入后肯定只有产生新数据的事件,所以我们把新数据给记录到日志中。
创建触发器模板

/*
	创建触发器
	DELIMITER $

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

	DELIMITER ;
*/

创建一个触发器

DELIMITER $

CREATE TRIGGER stu_insert_trigger
AFTER INSERT
ON stu
FOR EACH ROW 
BEGIN
	INSERT INTO stu_log VALUES (NULL,'INSERT',NOW(),CONCAT('{id=',new.id,';stuname=',new.stuname,';stuage=',new.stuage,';stunumber=',new.stunumber,'}'),NULL);
END $

DELIMITER ;```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210321192038945.png)
插入几条数据看看

```sql
INSERT INTO stu VALUES (NULL,'张三',18,'gy1000'),
(NULL,'李四',20,'gy1001');

查看日志表
这里只演示效果,图随便截取的
在这里插入图片描述
3.为学生表创建一个删除触发器
注意:
删除只有老数据,没有新数据
当然你用了new关键字会报错
在这里插入图片描述

DELIMITER $

CREATE TRIGGER stu_delete_trigger
AFTER DELETE
ON stu
FOR EACH ROW 
BEGIN
	INSERT INTO stu_log VALUES (NULL,'DELETE',NOW(),NULL,CONCAT('{id=',old.id,';stuname=',old.stuname,';stuage=',old.stuage,';stunumber=',old.stunumber,'}'));
END $

DELIMITER ;

删除两个学生

DELETE FROM stu WHERE id IN(1,2);

在这里插入图片描述
4.创建一个更新触发器
思考这个更新之前肯定有一个值,我们叫旧值,更新之后我们叫新值。

DELIMITER $

CREATE TRIGGER stu_update_trigger
AFTER UPDATE
FOR EACH ROW
BEGIN
	INSERT INTO stu_log VALUES (NULL,'UPDATE',NOW(),NULL,CONCAT('{id=',old.id,';stuname=',old.stuname,';stuage=',old.stuage,';stunumber=',old.stunumber,'}'));
END $

DELIMITER ;

然我们看看学生表中的数据,现在我们对这个表进行跟新操作。
在这里插入图片描述


UPDATE stu SET stunumber='gy1001' WHERE stunumber ='gy1003';
UPDATE stu SET stunumber='gy1002' WHERE stunumber ='gy1004';
UPDATE stu SET stunumber='gy1003' WHERE stunumber ='gy1005';

在这里插入图片描述

然后我们看看日志表
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值