1

这是我编写的 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 并且我更新它以获取新值“电影”时,该col_updated_on列仍将显示旧时间戳。

请让我知道我必须做些什么改变来检查这种情况。

提前感谢您的回复。

我有另一个问题。下面的伪可能吗?

这是我的两张表 -
myTable(id, someId, col_updated_on); myOtherTable(id, col1, col2);

myTablemyOtherTable.someId 与.id具有一对一关系

我想在.col1 和.col2 更新时更新myTable.col_updated_on 。我该怎么做呢?我应该使用“更新前”还是“更新后”?myOtherTablemyOtherTable

4

1 回答 1

3

使用NULL-safe 相等运算符

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

但是,请注意 MySQL 的TIMESTAMP数据类型可以(并且默认情况下会)在记录更新时自动更新,因此不需要这样的触发器。

而且,您真的不应该将多个项目存储在 MySQL 等关系数据库中的分隔字符串中。阅读数据库设计,尤其是一对多关系:如果有一个单独的表会更好,其中每条记录将一个标识符(键)从现有(外部)表链接到单个项目;然后根据查询的需要将这些表连接在一起。

于 2012-07-24T06:13:17.200 回答