MySQL Advanced-Trigger

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 ;

Guess you like

Origin blog.csdn.net/qq_39736597/article/details/112849214