mysql - 包含 NULL 作为值的列未在审计表中进行审计。我正在使用更新后触发器

标签 mysql

BEGIN
IF 
    NEW.id <> OLD.id OR 
    NEW.customerId <> OLD.customerId OR 

  THEN BEGIN
     INSERT INTO customerDocuments_audit
(
id,customerId,auditActionDate,auditAction)values(NEW.id,NEW.customerId, NOW(),'update'
);
     END; END IF;
END$$

如果我尝试更新包含 NULL 值的列。列正在更新,但它没有在审核表中插入任何值。

最佳答案

您需要专门检查 NULL 值,因为在常规逻辑运算中使用 NULL 值将始终返回 false 结果。将您的 IF 语句更改为:

IF 
    NEW.id <> OLD.id OR 
    NEW.id IS NULL AND OLD.id IS NOT NULL OR
    NEW.id IS NOT NULL AND OLD.id IS NULL OR
    NEW.customerId <> OLD.customerId OR 
    NEW.customerId IS NULL AND OLD.customerId IS NOT NULL OR
    NEW.customerId IS NOT NULL AND OLD.customerId IS NULL

关于mysql - 包含 NULL 作为值的列未在审计表中进行审计。我正在使用更新后触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54343317/

相关文章:

php - 在一个数组中设置两个选择查询的值

python - 将用户名存储到 mysql [PYTHON]

java - 如何使用 Java 在 MySQL 中进行不区分大小写的选择

python - 使用 python 在 Mysql 中进行一些插入

mysql - 复制现有数据库但不包含数据

php - 每 4 条记录创建列表

php - 手动锁定单个表行

sql - 城市和经纬度距离

mysql - 是否有类似 SQL Server 2005 的 TRY/CATCH block 的 MySQL 功能?

php - 如何从某个数字/偏移量开始 AUTOINCREMENT?