Database MySQL - Triggers

Table of contents

1. Introduction

2. Grammar

1. insert type

 2. update type

 3. delete type


1. Introduction

A trigger is a database object related to a table, which triggers and executes a set of SQL statements defined in the trigger before or after insert/update/delete. This feature of the trigger can assist the application to ensure data integrity, log records, data verification and other operations on the database side.

Use the aliases OLD and NEW to refer to the record content changed in the trigger, which is similar to other databases.

Currently, triggers only support row-level triggers , not statement-level triggers.

trigger type NEW and OLD
INSERT type trigger NEW indicates data that will be or has been added
UPDATE trigger OLD indicates the data before modification, NEW indicates the data to be or has been modified
DELETE type trigger OLD indicates data that will be or has been deleted

2. Grammar

① Create:

CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE
ON tbl_name FOR EACH ROW  --行级触发器
BEGIN
  trigger_stmt;
END;

② View:

SHOW TRIGGERS;

③ Delete:

DROP TRIGGER [schema_name.] trigger_name ;
--如果没有指定schema_name,默认为当前数据库。

Case requirements: Define triggers based on specified requirements

Record the data change log of the tb_user table through the trigger, and insert the change log into the log table user_logs, including adding, modifying, and deleting.
 

-- 触发器

-- 准备工作:日志表 user_logs
create table user_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;

1. insert type

-- 定义insert触发器
create trigger tb_user_insert_trigger
    after insert on tb_user for each row
begin
    -- 在日志表中插入数据
    insert into user_logs
         (id, operation, operate_time, operate_id, operate_params) 
         VALUES(null,'insert',now(),new.id,concat('插入的数据内容为:
                id=',new.id,'name:',new.name,'phone=',new.phone,
               'email=',new.email,'profession=',new.profession));
end;

-- 查看触发器
show triggers ;

-- 删除触发器
drop trigger tb_user_insert_trigger;

-- 插入数据到tb_user
insert into tb_user
  (id,name,phone,email,profession,age,gender,status,createtime) values 
  ('25','二皇子','18809091212','[email protected]','软件工程',23,'1','1',now());

At this point, information exists in the log table:

 2. update type

-- 定义update触发器
create trigger tb_user_update_trigger
    after update on tb_user for each row
begin
    -- 在日志表中更新数据
    insert into user_logs
         (id, operation, operate_time, operate_id, operate_params) 
         VALUES(null,'update',now(),new.id,concat
              ('更新之前的数据为:
                id=',old.id,'name:',old.name,'phone=',old.phone,
               'email=',old.email,'profession=',old.profession,
               '更新之前的数据为:
                id=',new.id,'name:',new.name,'phone=',new.phone,
               'email=',new.email,'profession='+new.profession));
end;

-- 查看触发器
show triggers ;

-- 删除触发器
drop trigger tb_user_update_trigger;

-- 更新数据
update tb_user set age = 32 where id = 23;

At this point, information exists in the log table:

 3. delete type

-- 定义delete触发器
create trigger tb_user_delete_trigger
    after delete on tb_user for each row
begin
    -- 在日志表中更新数据
    insert into user_logs
         (id, operation, operate_time, operate_id, operate_params) 
         VALUES(null,'delete',now(),old.id,concat
              ('删除之前的数据为:
                id=',old.id,'name:',old.name,'phone=',old.phone,
               'email=',old.email,'profession=',old.profession));
end;

-- 查看触发器
show triggers ;

-- 删除触发器
drop trigger tb_user_delete_trigger;

-- 删除数据
delete from tb_user where id = 25;

At this point, information exists in the log table: 

Guess you like

Origin blog.csdn.net/hdakj22/article/details/129989729