【发布时间】:2020-09-28 08:45:28
【问题描述】:
我有一个特殊要求,我需要将“modifiedDate”列的日期时间值自动更新为 NOW(),如果:
- 提供的值为空
- 提供的值与更新前相同
但是
如果提供的值是任何其他日期字符串,则使用值更新列。
所以,我已经设置了这个触发器,但现在有些事情是正确的:
CREATE TRIGGER `tr_users_updateModDateOnUpdate` BEFORE UPDATE ON `tbl_users`
FOR EACH ROW IF (OLD.date_modified <> NEW.date_modified) THEN
SET NEW.date_modified = IFNULL(NEW.date_modified, NOW());
ELSE
SET NEW.date_modified = NOW();
END IF
我看不出它有什么问题...,但是在使用我的 Web 应用程序进行测试时,我遇到了奇怪的行为。所以尝试查看问题是我的触发器还是我的 php 代码...
谁能告诉我我的触发器代码是否符合我的上述要求?谢谢一百万!
拍拍
【问题讨论】:
-
但我在使用我的 Web 应用程序进行测试时出现了奇怪的行为 描述这种奇怪... PS。当执行 'THEN' 时,
NEW.date_modified不能为 NULL - 所以 IFNULL(此外,重新分配本身)是多余的。 -
附言。您应该考虑 5 种不同的情况 - 对于 OLD 和 NEW,值可能为 NULL 或不为空,如果两者都不为空,则可能相等或不相等。
标签: mysql sql date database-trigger