1 Introduction
Triggers are database objects associated with a table, means before insert / update / delete, or after , the trigger and the trigger execute SQL statements defined in the collection . (Similar to events in JS) This feature of triggers can assist applications in ensuring data integrity, logging, data verification and other operations on the database side .
Use aliases OLD and NEW to refer to the changed record content in the trigger , which is similar to other databases. Now triggers only support row-level triggers, not statement-level triggers.
Trigger type | Use of NEW and OLD |
---|---|
INSERT trigger | NEW means new data will or have been added |
UPDATE trigger | OLD indicates the data before modification, and NEW indicates the data that will or has been modified |
DELETE trigger | OLD indicates data that will or has been deleted |
2 Create trigger
Grammatical structures :
create trigger trigger_name
before/after insert/update/delete
on tbl_name
[ for each row ] -- 行级触发器
begin
trigger_stmt ;
end;
Example
demand
通过触发器记录 emp 表的数据变更日志 , 包含增加, 修改 , 删除 ;
First create a log table:
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;
Create an insert trigger to complete the log record when inserting data:
DELIMITER $
create trigger emp_logs_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 $
DELIMITER ;
Create an update trigger to complete the log record when updating data:
DELIMITER $
create trigger emp_logs_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 $
DELIMITER ;
Create a delete row trigger, complete the log record when deleting data:
DELIMITER $
create trigger emp_logs_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 $
DELIMITER ;
test:
insert into emp(id,name,age,salary) values(null, '光明左使',30,3500);
insert into emp(id,name,age,salary) values(null, '光明右使',33,3200);
update emp set age = 39 where id = 3;
delete from emp where id = 5;
3 Delete trigger
Grammatical structures :
drop trigger [schema_name.]trigger_name
If schema_name is not specified, it defaults to the current database.
4 View trigger
You can view the status, syntax and other information of the trigger by executing the SHOW TRIGGERS command.
Grammatical structures:
show triggers ;