MySQL BEFORE DELETE触发器

时间:2019-02-04 12:52:34  来源:igfitidea点击:

BEFORE DELETE触发器就是MySQL将在执行DELETE操作之前触发该触发器。

语法

在MySQL中创建BEFORE DELETE触发器的语法为:

CREATE TRIGGER trigger_name
BEFORE DELETE
   ON table_name FOR EACH ROW

BEGIN

   -- variable declarations

   -- trigger code

END;

参数|说明
trigger_name | 要创建的触发器的名称。
BEFORE DELETE | 表明触发器将在执行DELETE操作之前触发。
table_name | 要创建触发器的表的名称。

注意
您不能在视图上创建 BEFORE DELETE 触发器。
有两个变量NEW和OLD分别代表执行触发器前后的记录。
NEW 的值可以被更新,OLD的值不能被更新
比如想执行触发器后,新值都加5 ,可以这样写NEW.value = OLD.value

MySQL BEFORE DELETE触发器示例

下面的示例说明如何使用MySQL中的CREATE TRIGGER语句创建BEFORE DELETE触发器。

  1. 创建的表如下:
CREATE TABLE contacts
( contact_id INT(11) NOT NULL AUTO_INCREMENT,
  last_name VARCHAR(30) NOT NULL,
  first_name VARCHAR(25),
  birthday DATE,
  created_date DATE,
  created_by VARCHAR(30),
  CONSTRAINT contacts_pk PRIMARY KEY (contact_id)
);
  1. 使用CREATE TRIGGER语句创建一个BEFORE DELETE触发器,如下所示:
DELIMITER //

CREATE TRIGGER contacts_before_delete
BEFORE DELETE
   ON contacts FOR EACH ROW

BEGIN

   DECLARE vUser varchar(50);

   -- 查找执行了insert操作的用户名,放到变量vUser中
   SELECT USER() INTO vUser;

   -- 将delete操作记录放到审计表中
   INSERT INTO contacts_audit
   ( contact_id,
     deleted_date,
     deleted_by)
   VALUES
   ( OLD.contact_id,
     SYSDATE(),
     vUser );

END; //

DELIMITER ;