MySQL 触发器中 Contact 表插入数据导致 contactable 为 null 的问题及解决方案
在 MySQL 触发器中,Contact 表设置了一个 BEFORE INSERT 触发器,触发器中定义了以下语句:
DECLARE `contactable` BIT(1);
SELECT `contactable` INTO `contactable` FROM `Profile` WHERE `username` = NEW.`contact`;
当向 Contact 中插入一行时,contactable 的值为 null,而实际上 Profile 中存在对应 NEW.contact 的 username 且 contactable 的值为 1。
可能出现该情况的原因有以下几个:
-
Profile 表中不存在对应 NEW.
contact的 username,导致 SELECT 语句没有结果,而触发器中没有处理 SELECT 语句没有结果的情况,所以会将 contactable 的值设置为 null。 -
Profile 表中对应 NEW.
contact的 username 存在,但 contactable 的值为 null,这可能是因为该字段在定义时没有设置默认值,或者被修改为 null 了。 -
触发器中的 SELECT 语句没有写对,导致无法正确从 Profile 表中获取 contactable 的值。
解决该问题的方法是:
-
在触发器中添加处理 SELECT 语句没有结果的情况的代码,如设置一个默认值。
-
检查 Profile 表中对应 NEW.
contact的 username 的 contactable 字段是否为 null,如果是,则需要修改为 1 或者设置默认值。 -
检查触发器中的 SELECT 语句是否正确,可以通过在 MySQL 命令行中执行该语句进行测试。
原文地址: https://www.cveoy.top/t/topic/m0TS 著作权归作者所有。请勿转载和采集!