MySQL BEFORE INSERT触发器


本MySQL教程中将学习如何在MySQL中创建 BEFORE INSERT触发器。

BEFORE INSERT触发器是指MySQL将在执行INSERT操作之前触发此触发器。

语法

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

1
2
3
4
5
6
7
8
9
10
11
CREATE TRIGGER trigger_name
BEFORE INSERT
ON table_name FOR EACH ROW
BEGIN
-- 变量声明
-- 触发器代码
END;
参数 说明
trigger_name 触发器的名称。
BEFORE INSERT 指明触发器将在执行INSERT操作之前被触发。
table_name 数据表的名称。

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

让我们看看如何在MySQL中使用CREATE TRIGGER语句创建BEFORE INSERT触发器。

创建表:

1
2
3
4
5
6
7
8
9
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)
);

创建一个BEFORE INSERT触发器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

</td>

DELIMITER //
CREATE TRIGGER contacts_before_insert
BEFORE INSERT
ON contacts FOR EACH ROW
BEGIN
DECLARE vUser varchar(50);
-- 查找执行insert操作的用户名,放到变量vUser中
SELECT USER() INTO vUser;
-- 将create_date字段更新为当前系统日期
SET NEW.created_date = SYSDATE();
-- 将created_by字段更新为执行insert操作的用户的名称。
SET NEW.created_by = vUser;
END; //
DELIMITER ;

这样当有人在表contacts上执行sql insert语句,created_date created_by 两个字段就会记录操作人和操作时间。


原文链接:https://codingdict.com/