【Mysql系列】存储过程和函数

本文介绍如何使用触发器记录数据库表的变更日志,包括插入、更新和删除操作,并提供了具体的SQL实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

触发器概述

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

触发类型NEW和OLD的使用
INSERT 型触发器NEW表示将要或者以及新增的数据
UPDATE型触发器OLD表示修改之前的数据、
DELETE型触发器OLD表示将要或者已经删除的数据

触发器语法

创建触发器

CREATE trigger trigger_name

before / after / insert / update / delete

on tbl_name

[ for each row ]

begin

	trigger_stmt;

end;

需求

通过触发器记录 emp 表的数据变更日志、包含增加、修改、删除等。

首先创建一张表

CREATE TABLE emp_logs(
id int(11) not null auto_increment,
operation varchar(20) not null,
operate_time datetime not null,
operate_id int(11) not null,
operate_params varchar(500),
primary key (`id`)
)engine=innodb default charset=utf8;

新增

CREATE TRIGGER emp_insert_trigger
after insert 
on emp
for each row
begin
	
	insert into emp_logs(id,operation,operate_time,operate_id,operate_params)
	values(null,'insert',now(),new.id,concat('插入后 id: ',new.id,' name: ',new.`name`,' age: ',new.age,'salary',new.salary));
	
end
insert into emp(id,name,age,salary)
values(null,'光明左使',30,3500)
select * from emp_logs
1	insert	2022-11-07 21:06:39	5	插入后 id: 5 name: 光明左使 age: 30salary3500

修改

CREATE TRIGGER emp_update_trigger
after update 
on emp
for each row
begin
	
	insert into emp_logs(id,operation,operate_time,operate_id,operate_params)
	values(null,'insert',now(),old.id,concat('插入后 id: ',old.id,' name: ',old.`name`,' age: ',old.age,'salary',old.salary));
	
end
insert into emp(id,name,age,salary)
values(null,'光明右使',30,3500)
表格
2	insert	2022-11-07 21:10:24	6	插入后 id: 6 name: 光明右使 age: 30salary3500

删除

CREATE TRIGGER emp_delete_trigger
after DELETE 
on emp
for each row
begin
	
	insert into emp_logs(id,operation,operate_time,operate_id,operate_params)
	values(null,'delete',now(),old.id,concat('插入后 id: ',old.id,' name: ',old.`name`,' age: ',old.age,'salary',old.salary));
	
end
delete from emp where id = '6'
3	delete	2022-11-07 21:20:01	6	插入后 id: 6 name: 光明右使 age: 30salary3500

查看触发器

可以通过执行 SHOW TRIGGERS 命令查看触发器的状态、语法等信息

show triggers

删除触发器

语法结构

drop trigger [schema_name.]trigger_name

如果没有指定 schema_name、默认当前数据库

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值