我正在创建一个像这样的触发器
CREATE TRIGGER trigger_academictermregistration AFTER UPDATE ON academictermregistration FOR EACH ROW
BEGIN
DECLARE summary TEXT(65535);
SET summary = '';
IF(NEW.version <> OLD.version) THEN
SET summary = concat(summary, ' @VER: ', OLD.version, '-->', NEW.version);
END IF;
IF(NEW.isDeleted <> OLD.isDeleted) THEN
SET summary = concat(summary, ' @IS_DELETED: ', OLD.isDeleted, '-->', NEW.isDeleted);
END IF;
INSERT INTO auditinfo (entityId, entityName, importance, details, modifiedOn, modifiedBy)
VALUE (NEW.id, 'AcademicTermRegistration', 1, summary, NOW(), NEW.modifiedBy);
IF(NEW.id <> OLD.id) THEN
INSERT INTO auditinfo (entityId, entityName, importance, details, timestamp, user_id)
VALUE (OLD.id, 'AcademicTermRegistration', 5, concat('ID: ', OLD.id, '-->', NEW.id), NOW(), 'backend');
END IF;
END
我有一个这样的触发器,这是在更新表后跟踪列值所做的更改,但是如果任何值为null(比如isDeleted),那么将该值更新为非null auditinfo表中没有详细信息
答案 0 :(得分:1)
从引用 - CONCAT()返回NULL,如果任何参数为NULL。
使用COALESCE功能,例如 -
SET summary = CONCAT(summary, ' @IS_DELETED: ', COALESCE(OLD.isDeleted, 'NULL'), '-->', COALESCE(NEW.isDeleted, 'NULL'));
此外,您可以使用CONCAT_WS()函数,它会在分隔符参数后跳过任何NULL值 -
SET summary = CONCAT_WS('', summary, ' @IS_DELETED: ', OLD.isDeleted, '-->', NEW.isDeleted);