【MySQL】MySQL触发器使用简单说明

目录

  • 一、什么是触发器
  • 二、触发器创建语法
  • 三、触发器类型(触发语句)
  • 四、分支、变量得使用
  • 五、old和new的说明及用法

一、什么是触发器

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。
举个例子,比如你现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插入一条数据的之后帮你在日志表中插入一条日志信息。当然触发器并不是只能进行插入操作,还能执行修改,删除。

二、触发器创建语法

CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt

- trigger_name:触发器的名称
- tirgger_time:触发时机,为BEFORE或者AFTER
- trigger_event:触发事件,为INSERT、DELETE或者UPDATE
- tb_name:表示建立触发器的表明,就是在哪张表上建立触发器
- trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句  
- FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器

所以可以说MySQL创建以下六种触发器:
BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE
AFTER INSERT,AFTER DELETE,AFTER UPDATE

创建有多个执行语句的触发器

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
    语句1;
    语句2;
    ...
END

例子:

DELIMITER ||   #将语句结束符从;改为||
CREATE TRIGGER demo BEFORE DELETE
    ON users FOR EACH ROW
    BEGIN
    INSERT INTO logs VALUES(NOW());
    INSERT INTO logs VALUES(NOW());
    END
    ||
DELIMITER ;  #将语句结束符从||改为;

三、触发器类型(触发语句)

触发器类型 激活触发器的语句
insert型触发器 insert,load data,replace
update型触发器 update
delete型触发器 delete,replace

四、分支、变量得使用

1、分支

语法:

if condition1 then statement1
elseif condition2 then statement2
else statement3
end if;

例子:

if @count = 0 then
set @Ins = 'drop Instrument';
delete from product_info where product_id = old.INSTRUMENT_ID and product_flag = 0;
elseif @count > 0 THEN
set @Ins = 'Keep it';
end if;
2、变量

设置变量语法:

set @value1 = statement1;

设置变量例子:

set @count = (select count(*) from check_record where INSTRUMENT_ID = old.INSTRUMENT_ID);

使用变量例子:

delete from product_info where @name = 'abc'

混合使用例子:

create trigger check_record_delete_trigger after DELETE
on check_record FOR EACH ROW
begin
 
set @count = (select count(*) from check_record where INSTRUMENT_ID = old.INSTRUMENT_ID);
 
if @count = 0 then
set @Ins = 'drop Instrument';
delete from product_info where product_id = old.INSTRUMENT_ID and product_flag = 0;
elseif @count > 0 THEN
set @Ins = 'Keep it';
end if;
 
 
set @count = (select count(*) from check_record where REAGENT_ID = old.REAGENT_ID);
 
if @count = 0 then
set @Rea = 'drop Reagent';
delete from product_info where product_id = old.REAGENT_ID and product_flag = 1;
elseif @count > 0 THEN
set @Rea = 'Keep it';
end if;
end;

五、old和new的说明及用法

1.当使用insert语句的时候,如果原表中没有数据的话,那么对于插入数据后表来说新插入的那条数据就是new,如图所示:

【MySQL】MySQL触发器使用简单说明_第1张图片

2.当使用delete语句的时候,删除的那一条数据相对于删除数据后表的数据来说就是od,如图所示:
【MySQL】MySQL触发器使用简单说明_第2张图片

3.当使用update语句的时候,当修改原表数据的时候相对于修改数据后表的数据来说原表中修改的那条数据就是old,而修改数据后表被修改的那条数据就是new,如图所示:
【MySQL】MySQL触发器使用简单说明_第3张图片

例子:

delete from product_info where product_id = old.REAGENT_ID and product_flag = 1;

摘自/参考:
https://www.cnblogs.com/phpper/p/7587031.html
https://blog.csdn.net/zhouyingge1104/article/details/37532749
https://www.cnblogs.com/Jasxu/p/mysql_trigger.html

你可能感兴趣的:(【MySQL】MySQL触发器使用简单说明)