更新触发器以在字段中维护正确的URL

时间:2012-04-30 05:27:05

标签: mysql triggers

我正在寻找一个短期解决方案,同时我找出了同步在表中设置一个字段错误的原因 我准备了一个触发器,欢迎对它进行一些评论,以及任何必要的更正或更好的策略。

     CREATE TRIGGER urlcorrect AFTER INSERT ON sym_node
     FOR EACH ROW BEGIN
     IF NEW.sync_url= 'http://wrongaddress' THEN
     UPDATE sym_node SET sync_url= "http://123.456.7.89:1234/etc";
     END IF;;
     END$
     delimiter;

感谢 大卫

1 个答案:

答案 0 :(得分:0)

你的触发器在各方面都是错误的。

首先,我认为您需要一个BEFORE触发器,以便您可以在行进入您的表之前修复该行。

其次,这:

UPDATE sym_node SET sync_url= "http://123.456.7.89:1234/etc";

会更新sync_url表格中的每个sym_node,而这不是您想要的。我不认为MySQL会让你在该表的触发器内更新一个表(如果我错了,有人会纠正我)。此外,你应该使用单引号作为字符串文字,即使MySQL会让你使用双引号,也不要从MySQL松弛行为中汲取不良习惯。你想要:

set new.sync_url = 'http://123.456.7.89:1234/etc';

把所有这些放在一起,你就明白了:

delimiter $
create trigger urlcorrect before insert on sym_node
for each row begin
    if new.sync_url = 'http://wrongaddress' then
        set new.sync_url = 'http://123.456.7.89:1234/etc';
    end if;    
end;
$
delimiter ;