MySQL触发器资料整理创建触发器及查看、删除触发器

一、什么是触发器

1、触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是通过事件来触发,比如对一个表进行操作(insert,delete,update)的时候,就会执行它。

2、区别:触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

 

二、创建触发器

1、 语法

create
    TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name FOR EACH ROW
BEGIN
    # do something
END;

2、关键词说明

                 a. trigger_name: 触发器名称,唯一不可重复的。

                 b. trigger_time: 触发器执行时间 。 {BEFORE / AFTER} 表示事件之前或之后执行。

                 c. trigger_event:触发触发器的事件。{INSERT / DELETE / UPDATE}某个事件执行 

  • INSERT 当新的一行数据插入表中时触发,如执行insert,load data,replace语句插入新数据
  • DELETE 当表的一行数据被删除时触发,如执行delete,replace语句时
  • UPDATE 当表的一行数据被修改时触发,如执行update语句时

                 d. table_name:触发器作用于某张表上。

 

3.1、示例 --- 创建一个 update 触发器

CREATE
    TRIGGER update_client
    AFTER UPDATE
    on client for each ROW
BEGIN
    INSERT INTO `client_log` (
        `client_id`,
        `modify_flag`,
        `name`,
        `contact`,
        `phone`,
        `email`,
        `remarks`,
        `del_flag`,
        `create_date`,
        `create_by`,
        `update_date`,
        `update_by`
    )
    VALUES(
        old.id,
        "修改--原数据",
        old.name,
        old.contact,
        old.phone,
        old.email,
        old.remarks,
        old.del_flag,
        old.create_date,
        old.create_by,
        old.update_date,
        old.update_by
    );
END;

3.2、示例---创建一个 insert 触发器

DELIMITER $ # (使用 DELIMITER 将语句分隔符改为 $)
CREATE
    TRIGGER insert_client
    AFTER INSERT
    on client for each ROW
BEGIN
    INSERT INTO `chapter`.`client_log` (
        `client_id`,
        `modify_flag`,
        `name`,
        `contact`,
        `phone`,
        `email`,
        `remarks`,
        `del_flag`,
        `create_date`,
        `create_by`,
        `update_date`,
        `update_by`
    )
    VALUES(
        new.id,
        "新增数据",
        new.name,
        new.contact,
        new.phone,
        new.email,
        new.remarks,
        new.del_flag,
        new.create_date,
        new.create_by,
        new.update_date,
        new.update_by
    );
END$
DELIMITER $

4、old 、 new 说明

                  a. old :表示 修改 或 删除 之前的字段数据

                  b. new:表示 修改之后 或 插入的字段数据。(插入 之前、之后都可以)

 

三、查看触发器

1、

show triggers ;

2、

SELECT a.* from information_schema.`TRIGGERS` a [ where a.TRIGGER_NAME = 'update_client' ] ;

 

四、删除触发器

1、 DROP TRIGGER IF EXISTS trigger_name ;

2、示例:

DROP TRIGGER IF EXISTS update_client ;

 

 

五、触发器的执行顺序

1、我们建立的数据库一般都是 InnoDB 数据库,若SQL语句或触发器执行失败,MySQL 会回滚事务,有:

                 ①若 BEFORE 触发器执行失败,则 SQL 无法正确执行。

      ②若 SQL 执行失败时,则 AFTER 型触发器不会触发。

      ③若 AFTER 触发器执行失败,则 SQL 会回滚。

 

2、执行顺序图解

mysql触发器 变量 查询值 mysql触发器在哪里查看_mysql触发器 变量 查询值

 

 

补充:若有疑问,可私信联系。 需要示例代码完整脚本,请私信,谢谢。