如何跟踪mysql触发器或帮助此触发器

如何跟踪mysql触发器或帮助此触发器,mysql,string,triggers,Mysql,String,Triggers,有没有跟踪MySql触发器的方法?我被下面的一个卡住了 我想在insert连接其他两列之前计算一列,但问题是计算值总是null,我还需要检查一列是否有逗号分隔的值,在这种情况下,我只需要第一列,下面是代码 BEGIN declare pos int; pos = locate(',',new.Admin1Code, 1); if (pos = -1) then set new.StateCode = Concat(New.CountryCode,'.'

有没有跟踪MySql触发器的方法?我被下面的一个卡住了

我想在insert连接其他两列之前计算一列,但问题是计算值总是null,我还需要检查一列是否有逗号分隔的值,在这种情况下,我只需要第一列,下面是代码


BEGIN 
    declare pos int;
    pos = locate(',',new.Admin1Code, 1);
    if (pos = -1) then
        set new.StateCode = Concat(New.CountryCode,'.',New.Admin1Code);
    else
        set new.StateCode = Concat(New.CountryCode,'.',substring(New.Admin1Code,1,pos));
    end if;   
END;
有什么问题吗

谢谢。

将永远不会返回-1-如果您尝试:

SELECT LOCATE(',', 'abbc')
…它返回0。使用:

if (pos > 0) then
  set new.StateCode = Concat(New.CountryCode,'.',substring(New.Admin1Code, 1, pos));        
else
  set new.StateCode = Concat(New.CountryCode,'.',New.Admin1Code);
end if;
文件中说:

如果substr不在str中,则返回0


小马:谢谢你的回答,我的pos=0,但我改为-1,因为它似乎不起作用,我现在意识到mysql正在以某种方式缓存值,我正在从文件到测试触发器进行批量加载,它总是显示相同的结果,这就是我认为它不起作用的原因,您以前对mysql有过同样的问题吗?@dev cu:我认为问题在于您正在测试的数据-mysql不会缓存这些值。或者可能是批量加载绕过了触发器?