如果列的默认NULL值更改为某个值,则MySQL Trigger不会执行

时间:2012-07-24 06:08:33

标签: mysql

这是我写的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”吗?

1 个答案:

答案 0 :(得分:3)

使用NULL-safe equality operator

IF NOT OLD.column <=> NEW.column THEN

但是,请注意,只要更新记录,MySQL的TIMESTAMP数据类型就可以(并且默认情况下)automatically update,这样就不需要这样的触发器。

但是,你 REALLY 不应该在像MySQL这样的关系数据库中的分隔字符串中存储多个项目。阅读database design,特别是一对多的关系:通过拥有一个单独的表可以更好,其中每个记录将现有(外部)表中的标识符(键)链接到单个项;然后,您可以根据查询中的要求将join表格放在一起。