【问题标题】:PHP MyAdmin After Update Trigger not working更新触发器后的PHPMyAdmin不起作用
【发布时间】:2014-08-10 00:52:04
【问题描述】:

我正在使用 PHP MyAdmin 版本 4.1.12。

我正在尝试创建一个简单的触发器,在更新后,将表“person”中的“dateModified”设置为 CURRENT_TIMESTAMP。 dateModified 属于 TIMESTAMP 类型。对人员进行更新的方式是通过网页上启用 X-Editable 的网格视图在单个记录中设置单个属性。在对具有更新属性的模型执行验证后,使用相关更新 SQL 创建并执行新的数据库命令。所以每次更新只会修改“person”中的一行。

这是我为创建触发器而编写的 SQL:

DELIMITER |
CREATE TRIGGER PERSON_AUPD AFTER UPDATE ON person
FOR EACH ROW BEGIN
SET @dateModified = CURRENT_TIMESTAMP ;
END;
|
DELIMITER ;

执行更新后,我看到触发器没有触发,时间戳与创建它们的时间戳保持不变(dateModified 和 dateCreated 的默认值都是 CURRENT_TIMESTAMP,因此它们会在插入时自动设置) .

我四处寻找答案,甚至研究了获取更新的替代方法(替代方法是调用模型的 afterupdate 方法并在 dateModified 上执行单独的 SQL)。在我将更多代码放入我的模型之前,我宁愿用尽所有使用触发器的机会。

任何帮助将不胜感激。

【问题讨论】:

  • 使用before update 而不是after update 之后您无法更改列值
  • @juergend 谢谢,我已将触发器设置为更新前。但是它仍然没有触发。
  • 并使用SET NEW.dateModified = CURRENT_TIMESTAMP;
  • @juergend 刚刚进行了修改,效果很好!非常感谢您的帮助。

标签: php mysql sql triggers sql-update


【解决方案1】:

感谢@juergend,解决方案如下:

  • 将触发器类型设置为before update,因为after update不能更新属性,最好用于在相关审计表等中插入新记录。

  • NEW.添加到您要修改的属性的前面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2014-08-22
    相关资源
    最近更新 更多