Mysql触发器有什么问题?
CREATE TRIGGER ebdaa.active_cus AFTER UPDATE ON ebdaa.appoints
FOR EACH ROW
BEGIN
IF NEW.confirmed = 1 OR NEW.attend =1 THEN
update ebdaa.appoints SET NEW.active= 1 ;
END IF;
END;
答案 0 :(得分:2)
以下是触发器的错误:
1)触发器主体中的SQL UPDATE
语句无效。 NEW.active
是对刚刚更新的行中active
列的值的引用。这是该行的值,而不是列的名称。
2)即使修改了SQL语句以纠正该问题,我们也不希望针对同一行发出后续UPDATE语句。 (在某些数据库中,这是不允许的;我很惊讶MySQL会允许它。)
3)这是 AFTER UPDATE
触发器。我们认为这个触发器的预期结果(即在特定条件为真时将行中的列设置为特定值)将在 BEFORE UPDATE
触发器中更有效地实现。
以下是将active
或confirmed
列设置为1时将attend
列设置为1的触发器示例:
USE ebdaa;
DELIMITER $$
CREATE TRIGGER active_cus_bu
BEFORE UPDATE ON appoints
FOR EACH ROW
BEGIN
IF ( NEW.confirmed = 1 OR NEW.attend = 1 ) THEN
SET NEW.active = 1;
END IF;
END$$
DELIMITER ;
答案 1 :(得分:1)
您需要更改分隔符,将触发器设置为before
并删除更新语句
delimiter |
CREATE TRIGGER ebdaa.active_cus BEFORE UPDATE ON ebdaa.appoints
FOR EACH ROW
BEGIN
IF NEW.confirmed = 1 OR NEW.attend = 1 THEN
SET NEW.active = 1;
END IF;
END
|
delimiter ;