mysql - 当旧值为 NULL 时,MySQL 触发器更新日期不起作用
问题描述
当用户未提供值时,我需要将 Timestamp 字段更新为 NOW()。
所以我写了这个触发器:
CREATE TRIGGER TRG_SAS_MASTERDATA_TO_IPS_SI_UPDATE_DATE
BEFORE UPDATE ON SAS_MASTERDATA_TO_IPS_SI
FOR EACH ROW
BEGIN
IF !(NEW.UPDATE_DATE <=> NULL) THEN
SET NEW.UPDATE_DATE= NOW();
END IF;
END
它运行良好,但时间戳的旧值为 NULL 时除外。在这种情况下,它保持为 NULL。
你有什么主意吗 ?
谢谢
解决方案
从技术上讲,没有在更新中不提供值这样的事情,因为当没有提供值时,这与提供当前/现有值完全相同。
NEW.UPDATE_DATE <=> OLD.UPDATE_DATE
将在这两种情况下评估为真(不提供值与提供现有值)。它们在触发器中无法区分。
如果您在表定义中声明这样的列,MySQL 内置的时间戳功能实现了您正在寻找的内容,而无需触发器。
UPDATE_DATE TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
如果更新查询中未提供列值,但更新至少更改了另一列,则时间戳列将设置为NOW()
。
推荐阅读
- spring-boot - 使用 Spring BOOT 创建访问网页的角色要求
- java - 如何制作总和为 n(n-1)/2 的数字列表
- visual-studio-code - VSCode对vim的ci的快捷命令是什么
VSCode 有办法在标签之间进行选择吗?而且我的意思不仅仅是折叠和取消折叠,我的意思是选择开始标签和结束标签之间的所有内容。
- android - 自定义 TextInputLayout 在后按时设置错误的值
- bash - 如何将多行输出存储在单独的变量中?
- python - for/else 块中的错误打印输出错误触发
- python - 字典/json 赋值 - python
- javascript - 我怎样才能等到 Reactjs 中的函数完成?
- chart.js - 勾选 - 没有负面
- android - 我可以使用 ?attr/ 值作为字符串数组中的项目值吗?