MySQL 触发器(Trigger)是一种特殊的存储过程,它会在指定的事件发生时自动执行。这些事件可以是 INSERT、UPDATE 或 DELETE 操作。触发器可以在这些操作之前(BEFORE)或之后(AFTER)执行。
假设我们有一个表 employees
,我们希望在插入新员工时,自动记录插入的时间和操作用户的 ID。
DELIMITER $$
CREATE TRIGGER before_employee_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
-- 创建变量
SET NEW.insert_time = NOW();
SET NEW.inserted_by = CURRENT_USER();
END$$
DELIMITER ;
;
改为 $$
,以便在触发器定义中使用 ;
。before_employee_insert
的触发器。employees
表的 INSERT 操作之前执行。insert_time
字段为当前时间。inserted_by
字段为当前用户。原因:
解决方法:
-- 检查触发器是否存在
SHOW TRIGGERS LIKE 'before_employee_insert';
-- 删除已存在的触发器(如果存在)
DROP TRIGGER IF EXISTS before_employee_insert;
-- 重新创建触发器
DELIMITER $$
CREATE TRIGGER before_employee_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
SET NEW.insert_time = NOW();
SET NEW.inserted_by = CURRENT_USER();
END$$
DELIMITER ;
领取专属 10元无门槛券
手把手带您无忧上云