我正在使用 PHP MyAdmin 版本 4.1.12。
我正在尝试创建一个简单的触发器,在更新后,将表“person”中的“dateModified”设置为 CURRENT_TIMESTAMP。 dateModified 是 TIMESTAMP 类型。对人员进行更新的方式是通过网页上启用 X-Editable 的 GridView 在单个记录中设置单个属性。在使用更新的属性对模型执行验证后,将使用相关更新 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)。在将更多代码放入我的模型之前,我宁愿用尽一切使用触发器的机会。
任何帮助将不胜感激。
最佳答案
感谢@juergend,解决方案如下:
将触发器类型设置为
before update
,因为after update
无法更新属性,最好用于在相关审计表中插入新记录等。将
NEW.
添加到您要修改的属性的前面。
关于PHPMyAdmin 更新后触发器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220727/