前言
在MySQL中,触发器(Trigger)是一种特殊的存储过程,用于在数据库表上定义在特定事件发生时自动执行的操作。
数据准备
-- 创建学生表
create table students(
stu_num char(8) primary key,
stu_name varchar(10) not null,
stu_gender char(2) not null,
stu_age int not null,
cid int,
);
-- 创建日志表
create table stulogs(
id int primary key auto_increment,
time timestamp,
log_text varchar(200)
);
创建触发器
语法:
create trigger trigger_name
<before|after> -- 定义插法时机
<insert|update|delete> -- 定义DML类型
on table_name
for each row -- 声明为行级触发器(只要操作一条记录触发器执行一次)
sql_statement -- 触发器操作
示例:
-- 创建触发器,学生表发生添加操作时,日志表添加一条日志
create trigger tri_log
after insert on students
for each row
insert into stulogs(time,log_text) value(now(),concat('添加',new.stu_num,'学生信息'))
查看触发器
show triggers;
测试触发器
-- 向学生表添加一条信息
insert into students(stu_num,stu_name,stu_gender,stu_age)
value('20220019','小马','女',17);
-- 查看日志表
select *from stulogs;
id|time |log_text |
--+-------------------+--------------+
1|2023-07-29 17:30:10|添加20220019学生信息|
删除触发器
drop trigger trigger_name;
NEW和OLD
在MySQL触发器中,NEW和OLD是两个特殊的关键字,用于引用触发器所关联的行的新值和旧值。它们通常在触发器中用于比较和处理数据。
- NEW表示触发器所关联的行的新值。在INSERT触发器中,它代表新插入的行;在UPDATE触发器中,它代表被更新的行的新值。
- OLD表示触发器所关联的行的旧值,在UPDATE和DELETE触发器中可用。在UPDATE触发器中,它代表被更新的行的旧值;在DELETE触发器中,它代表被删除的行的值。