MySQL进阶(4)——触发器

本文介绍了MySQL中的触发器,一种用于在数据修改前或后执行特定SQL语句的对象,以确保数据完整性。内容包括触发器的创建、查看和删除。通过OLD和NEW别名引用变化记录,支持行级触发,但不支持语句级触发。并提供了创建insert、update、delete触发器的实例。
摘要由CSDN通过智能技术生成

1、介绍

触发器是与表有关的数据库对象,指在 insert/update/delete之前或之后,触发并执行触发器中定义的 SQL 语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持 语句级触发。

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

2、创建触发器

语法结构:

create trigger trigger_name
before/after insert/update/delete
on table_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 comment '操作类型, insert/update/delete',
	operate_time datetime not null comment '操作时间',
	operate_id int(11) not null comment '操作表的id',
	operate_params varchar(500) comment '操作参数',
	primary key(id)
)engine=innodb default charset=utf8;

在这里插入图片描述
分别创建 insert、update、delete触发器

  1. insert:
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);

在这里插入图片描述

  1. update:
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, 'update', now(),new.id,concat('修改前(id:',old.id,', name:',old.name,', age:',old.age, ', salary:' ,old.salary,')修改后(id:',new.id,', name:',new.name,', age:',new.age, ', salary:' ,new.salary));
end$

执行插入命令:

update emp set age = 39 where id = 3;

在这里插入图片描述

  1. delete:
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、查看触发器

语法结构:

show triggers;

在这里插入图片描述

4、删除触发器

语法结构:

 drop trigger [schema_name.] trigger_name;

如果没有指定 schema_name,默认为当前数据库
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值