【问题标题】:Unable to insert write data conditionaly inside trigger (IF, CONCAT, IFNULL) in MySQL无法在 MySQL 的触发器(IF、CONCAT、IFNULL)内有条件地插入写入数据
【发布时间】:2020-09-06 13:49:45
【问题描述】:
CREATE TRIGGER TR_Update_Member
AFTER UPDATE ON `member` 
FOR EACH ROW
BEGIN
DECLARE changeNote VARCHAR(5000) DEFAULT '';

SET changeNote = IF(OLD.Name != NEW.Name, 
                    CONCAT( changeNote, 
                            'Name(', 
                            IFNULL(OLD.Name, '--'), 
                            '->', 
                            IFNULL(NEW.Name, '--'), 
                            '), '
                          ), 
                    changeNote);

SELECT TRIM(TRAILING ', ' FROM changeNote) INTO changeNote;

INSERT INTO `member_change_log`(`Name`) VALUES(changeNote)

END

上述触发器在名称中包含空值时不会插入任何数据。谁能请我的代码有什么问题。

【问题讨论】:

    标签: mysql triggers conditional-statements


    【解决方案1】:

    上述触发器在名称中包含空值时不插入任何数据。谁能请我的代码有什么问题。

    如果 NEW.Name 为 NULL,则 OLD.Name != NEW.Name 也为 NULL,并且 IF() 执行替代变体,即您获得

    SET changeNote = changeNote
    

    简单地交换变体:

    SET changeNote = IF( OLD.Name = NEW.Name, changeNote, CONCAT( ... ) );
    

    如果OLD.NameNEW.Name 都可能为NULL,则使用空安全比较运算符<=> 而不是常规比较=

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2011-10-05
      • 2012-12-02
      • 1970-01-01
      相关资源
      最近更新 更多