触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的SQL集合。

在这里插入图片描述

语法

在这里插入图片描述
eg:
在这里插入图片描述
在这里插入图片描述

CREATE TABLE `user_logs` (
  `id` int NOT NULL AUTO_INCREMENT,
  `operation` varchar(255) not NULL comment '操作类型, insert/update/delete',
	`operation_time` datetime not NULL comment '操作时间',
	`operation_id` int(11) not NULL comment '操作的ID',
  `operation_params` varchar(500) COMMENT '操作参数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3;

插入数据触发器

-- 插入数据触发器
create trigger tb_user_unsert_trigger
		after insert on t_test for each row
begin

		insert into user_logs(id,operation,operation_time,operation_id,operation_params) VALUES
	  (null,'insert',now(),new.id,concat('插入的数据内容为:id=',new.id,',name=',new.name,',no=',new.no));
end;

-- 查看当前数据库触发器
show triggers;
-- 删除
drop trigger tb_user_unsert_trigger;

--插入数据到t_test表
insert into t_test(id,name,tutor_info_picture,no)
VALUES (5,'小米','图',5);

注意:这里拿新添加的主键id,使用new关键字,获取当前时间使用函数now()

在这里插入图片描述

修改数据触发器

-- 修改数据触发器
create trigger tb_user_update_trigger
		after update on t_test for each row
begin

		insert into user_logs(id,operation,operation_time,operation_id,operation_params) VALUES
	  (null,'update',now(),new.id,concat('更新之前的数据内容为:id=',old.id,',name=',old.name,',no=',old.no,
																			' | 更新之后的数据内容为:id=',new.id,',name=',new.name,',no=',new.no));
end;

update t_test set name = '小小' WHERE id = 4;

在这里插入图片描述
注意:old为更新前的数据,new为更新后的数据,or each row表示每插一行就记录

删除数据触发器

-- 修改数据触发器
create trigger tb_user_delete_trigger
		after delete on t_test for each row
begin

		insert into user_logs(id,operation,operation_time,operation_id,operation_params) VALUES
	  (null,'delete',now(),old.id,concat('删除之前的数据内容为:id=',old.id,',name=',old.name,',no=',old.no));
end;

show triggers;

delete from t_test WHERE id = 2;

在这里插入图片描述
在这里插入图片描述

Logo

本社区面向用户介绍CSDN开发云部门内部产品使用和产品迭代功能,产品功能迭代和产品建议更透明和便捷

更多推荐