MySQL BEFORE INSERT触发器
时间:2019-02-04 12:52:33 来源:igfitidea点击:
本MySQL教程中将学习如何在MySQL中创建 BEFORE INSERT触发器。
BEFORE INSERT触发器是指MySQL将在执行INSERT操作之前触发此触发器。
语法
在MySQL中创建BEFORE INSERT触发器的语法为:
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触发器。
创建表:
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触发器
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 两个字段就会记录操作人和操作时间。