【发布时间】: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