2012-03-02 14 views
0

だからこそになるはずですが、私のMySQLはあまり良くありませんので、間違いなく私のところでは失敗です。
statsテーブルを更新する必要はありません。MySQLトリガがトリガされない?

DROP TRIGGER countryUpdate; 

DELIMITER // 

CREATE TRIGGER countryUpdate AFTER INSERT ON stats 
FOR EACH ROW BEGIN 
    DECLARE NewIP varchar(16); 
    DECLARE NewCountry varchar(80); 
    SET NewIP = inet_aton(new.vis_ip); 
    SET NewCountry = (SELECT country FROM iptocountry WHERE lower_bound <= NewIP AND upper_bound >= NewIP) 
    UPDATE stats 
     SET Country = NewCountry 

END // 

DELIMITER; 
+0

エラーメッセージは何ですか? –

+0

エラーなし、文字通りトリガーされていないようです。 統計表の[国]列は国で更新されません。 – FizzBuzz

答えて

3

まあ、最初のオフ、あなたのUPDATEそれがすべてで-さstatsテーブル内のすべてのの行を変更し、その挿入各行のためにそれをやって作品-if。それは本当にあまり意味がありません。最低限、where句を追加して、挿入したばかりの1つの行だけをヒットさせたいとします。

ので"a stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger."(「ストアド関数の制限」の下で見て)

が、代わりに、あなたが挿入トリガーの前にAAを使用する必要がある、とやるのでどうやら、しかし、MySQLでは全く動作することはできませんがSET new.country = NewCountry行を修正して挿入します。

+0

Where節の不足をうまくキャッチします。プロダクションでのデバッグを想像してみてください。 –

+0

ああ、そのポインタのおかげで。行はまだ更新されていないという問題は依然として残っています...それについての考えはありますか? – FizzBuzz

+0

@FizzBu​​zzああ、これは既に使用中のテーブルを更新できないためです。MySQLの既知の制限 - 私は私の答えを更新します。 (申し訳ありませんが、以前に入れていただろうが、私はそれを思い出してそれを見て) – derobert

関連する問題