2010-11-30 9 views
0

MySQL 5.1.36を使用して、スクラッチテーブルから「スクラッチ」データベースを削除するトリガーを作成しようとしています。MySQlのトリガーヘルプが必要です

CREATE DEFINER=`root`@`localhost` TRIGGER 
`jobq`.`DropScratch` 
BEFORE DELETE ON jobq.jobq FOR EACH ROW 
BEGIN 
DECLARE tblname VARCHAR(128); 
set tblname=concat('scratch.',OLD.jobname); 
DROP TABLE IF EXISTS tblname; 
END; 

私は常にエラーを取得しています:

Explicit or implicit commit is not allowed in stored function or trigger. 

は、私は何とかこの制限を克服することはできますか?

は、事前に
アルマン

答えて

1

ありがとうここでの主な問題は、あなたがトリガー内でテーブルを削除することはできませんということです。これは、「暗黙のコミット」が許可されていないと表示されているときのエラーメッセージです。ドロップテーブルは暗黙のコミットを行います。

したがって、トリガー以外にこれを行うには別の方法を見つけ出す必要があります。 1つの方法は、information_schema.tablesのデータをjobqテーブルと比較して、削除可能なスクラッチDB内のテーブルを探してドロップするcronジョブを設定することです。

また、ドロップテーブルステートメントを動的に作成しようとする方法が機能しないことを指摘しておきます。これは、 "scratch.jobname"ではなく、文字通り "tblname"という名前のテーブルを削除することになります。テーブルを動的に削除する場合は、Python、Perl、シェルなどの別のスクリプト言語でドロップテーブルステートメントを作成する必要があります。

幸い!

+0

ありがとう!、私はちょうど未使用のテーブルを消去するイベントを生成しました。私はトリガーがエレガントなソリューションになる可能性があるが、 – Arman