mysql - 触发器中的多个命令(更新具有不同条件的多个列)

标签 mysql triggers mysql-error-1064 database-trigger

我有一个问题,希望有人能够提供帮助。

我正在尝试编写一个触发器,它采用日期时间戳并将日期放入新列中。但同样,如果不同列中的值等于 x,则将其替换为 y。

我可以让单独的语句工作(即,如果我只有日期代码或单独的替换代码,它就可以正常工作),但我无法让它们在同一个触发器中工作。

SET NEW.date = LEFT(NEW.entrydate, 10);
IF 
    (NEW.connect_ip = "1.2.3.4") 
    THEN SET 
    NEW.connect_ip = "0.0.0.0";
    END IF

最佳答案

多语句触发器需要在其“主体”周围使用 BEGIN 和 END,并且通常在其声明周围覆盖 DELIMITER。

示例/模板:

DELIMITER $$

CREATE TRIGGER [blah blah]
BEGIN
   [do stuff]
END$$

DELIMITER ;

或者,对于您的具体情况,我前几天注意到一个答案,其中有一个我忽略的可能性;您可以在 SET 语句中设置多项内容:

SET NEW.date = LEFT(NEW.entrydate, 10)
    , NEW.connect_ip = IF(NEW.connect_ip = "1.2.3.4", "0.0.0.0", "1.2.3.4")
    ;

关于mysql - 触发器中的多个命令(更新具有不同条件的多个列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38884234/

相关文章:

mysql触发器插入多对多

php - MySQL:是否可以缩短错误消息?

php - 如果现有行为空mysql,如何使用特定的UPDATE查询

mysql - 修改 MYSQL 查询以获得两个表之间的 JOIN

php - 获取当前 session 的id

mysql - sql中的时差计算

具有内连接的 MYSQL 触发器

php - 尝试插入 IP 地址但出现错误

mySQL 复制错误。登入错误

mysql - #1064 - MySQL 错误