「みんな教えて! 選手権!!」開催のお知らせ

あるテーブルに行を挿入すると、そのテーブルの1分前以上に挿入された
行を全て削除するようなトリガーの作成は可能でしょうか?

トリガーは作れましたが、そのテーブルに行を挿入すると、
> Can't update table 'submitted' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
といわれます。

トリガって、自分自身のテーブルを操作することはできないんですか?

例えば、table_a に行を挿入すると、table_a に行を挿入するトリガーを
作るのは、無限ループになるので駄目なのは分かります。

でも、table_a に行を挿入すると、table_a のある行を削除するトリガーも
作れないようですがどうしてでしょう?

A 回答 (1件)

マニュアルに以下の記載があります。



「ストアド ファンクションまたはトリガ内では、その関数やトリガを実行したステートメントが ( 読み取り、または書込みに ) すでに使用しているテーブルを改変することはできない。」

http://dev.mysql.com/doc/refman/5.1/ja/routine-r …

理由としてはsweepeaさんが考えているように、SQL実行とトリガ実行が無限に繰り返される可能性があり、現状、再帰呼び出しも実装されていないので、入り口で禁止にしているということでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

むー、なるほど。
ということは、INSERT時に古いデータを自動削除、みたいなことは
できないんですね。
※INSERT→トリガー→ストアドプロシージャ→DELETEとしても、
やはり無理でした。。。

MySQLが駄目なのか、僕のやろうとしてることが駄目なのか。。。
くやしいです。

どうも、ありがとうございました。

お礼日時:2008/05/14 23:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報