这是我写的MYSQL触发器:
DELIMITER //
CREATE TRIGGER updtrigger BEFORE UPDATE ON myTable
FOR EACH ROW
BEGIN
IF (OLD.column IS NOT NULL AND NEW.column IS NOT NULL AND NEW.column != OLD.column) THEN
SET NEW.col_updated_on = NOW();
END IF;
END //
DELIMITER ;
如果column
有一个值(例如“电影”),并且我更新它以获得新值“电影,音乐”,则会执行触发器并且col_updated_on
应该具有当前时间戳
但是,当column
为NULL且我更新它以获取新值“movie”时,col_updated_on
列仍会显示旧的时间戳。
请让我知道我必须做些什么改变来检查这个条件。
提前感谢您的回复。
我有另一个问题。下面是伪可能吗?
这是我的两张桌子 -
myTable
(id,someId,col_updated_on);
myOtherTable
(id,col1,col2);
myTable
。someId与myOtherTable
有一对一的关系.id
每当myTable
。col1和myOtherTable
。col2更新时,我想更新myOtherTable
。col_updated_on。我该怎么做呢?我应该使用“BEFORE UPDATE”或“After UPDATE”吗?
答案 0 :(得分:3)
使用NULL
-safe equality operator:
IF NOT OLD.column <=> NEW.column THEN
但是,请注意,只要更新记录,MySQL的TIMESTAMP
数据类型就可以(并且默认情况下)automatically update,这样就不需要这样的触发器。
但是,你 REALLY 不应该在像MySQL这样的关系数据库中的分隔字符串中存储多个项目。阅读database design,特别是一对多的关系:通过拥有一个单独的表可以更好,其中每个记录将现有(外部)表中的标识符(键)链接到单个项;然后,您可以根据查询中的要求将join表格放在一起。