2012-04-30 14 views
0

私は、同期がテーブル内の1つのフィールドを間違って設定している理由を理解しています。より良い戦略。フィールドに正しい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

Mu そのアドバイスに感謝します。私は自分の悪い習慣に追加する必要はありません。 UPDATEステートメントがすべての行にその値を取得させることを指摘していただきありがとうございます。私がしたいことはまったくありません。 – user1365082

+0

これはうまくいきました。データは2行のみです。挿入はなく、更新のみです。トリガーはBEFORE UPDATE ...と残りの部分は正しいはずです。 – user1365082