mysql-为什么此触发器使我的某些插入挂起?

触发器如下:

DELIMITER //
CREATE TRIGGER `Conturi_BI` BEFORE INSERT ON `Conturi` FOR EACH ROW BEGIN
SET NEW.CUI_cod = digits(NEW.CUI);
END//
DELIMITER ;

我只是将数字功能应用于用户输入,以便更快地进行匹配和重复搜索,但是自从实现该功能以来,我的一些插入内容就挂了.我做了类似的更新,它没有相同的问题.

digits函数是由我和触发器创建的,并且在大多数情况下可以正常工作.

根据要求提供数字功能:

BEGIN
  DECLARE i, len SMALLINT DEFAULT 1;
  DECLARE ret CHAR(32) DEFAULT '';
  DECLARE c CHAR(1);
  SET len = CHAR_LENGTH( str );
  REPEAT
    BEGIN
      SET c = MID( str, i, 1 );
      IF c BETWEEN '0' AND '9' THEN 
        SET ret=CONCAT(ret,c);
      END IF;
      SET i = i + 1;
      END;
  UNTIL i > len END REPEAT;
  RETURN ret;
END

解决方法:

如果将null传递给数字函数,则数字函数将不起作用.它将永远循环.尝试一下

select digits(null)

因此,每次NEW.CUI为null时,它将使您的插入物挂起.您可以在函数的开头添加一个空检查:

if str is null
then 
   return '';
end if;
上一篇:Redis进阶


下一篇:2021-04-22