2012-04-30 20 views
0

我寻求短期的解决办法,而我的工作,为什么一个同步设置一个字段错误表中的 我准备了一个触发,并欢迎它的一些评论,任何必要的修正或更好的策略。触发更新,以保持正确的URL在现场

 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; 

感谢 大卫

+0

更好的策略是什么?您还没有解释您的问题 – zerkms

+0

就目前而言,我愿把这个触发。 MySQL Workbench认为它有错误。由于这是我的第一个触发因素,尽管我的研究结果是错误的,但我并不清楚这些错误。 – user1365082

回答

0

,您的触发是错误的各种方式。

首先,我想你想一个BEFORE触发器,使您可以修复行它进入您的餐桌前。

其次,这样的:

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

将更新sym_node表中的每个sync_url这不是你想要的。而且我不认为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 ; 
+0

穆 非常感谢他的意见。我不需要增加我的坏习惯。 我也很感谢你指出UPDATE语句会导致所有的行都得到这个值。根本不是我想要的。 – user1365082

+0

这个工作很好,有一个变化。数据只有两行。没有插入,只有更新。所以触发器应该在BEFORE UPDATE之前...其余的都是正确的。 – user1365082