2011-12-28 9 views
4

興味深い問題が発生しました。私は2つのトリガーを作成したいと思います。トリガー1はDROP TABLE、トリガー2はALTER TABLEで発生します。残念ながら、私はそれを行うための構文を知らないし、そのようなトリガーの構文も見つけることができませんでした。 MySQLでは、INSERTUPDATE、またはDELETEの前後に起動するトリガだけを書くことができますが、今度はデータベースレベルで適用可能なトリガを記述してテーブルイベントを発生させたいと思います。誰かが私を助けることができますか?変更またはドロップ時にMySQLトリガが起動する

+0

@Mythje:SQLサーバのこと。彼はMySqlについて尋ねた –

答えて

8

お探しのものは「DDLトリガー」と呼ばれています。 MySQLは、彼らがこのSourceForge request

あり

サポートしていませんが、私は、誰もが追加についてどのように深刻なわからないんだけど、それ

+0

+1優れた答え!しかし、あなたが正しくないことを願っており、彼らにはこれに対する解決策があります。私は他の答えも待って研究を続け、解決策が見つかったら私自身の質問に答えます。もしそうでなければ、おそらくあなたを受け入れるでしょう。ありがとうございました。 –

+0

あなたのリンクは今日何も指していませんが、[このワークログのエントリ](https://dev.mysql.com/worklog/task/?id=2418)が見つかりました。助けてほしいと思っています:-) – watery

1

それはトリガーが上の活性化されdocumentationにドロップstatements.Accordingのためのトリガーを使用することはできません

  • INSERT:新しい行をテーブルに挿入されるたびにトリガが起動されます。たとえば、INSERT、LOAD DATA、およびREPLACE ステートメントを使用します。

    UPDATE:行が変更されるたびにトリガーがアクティブになります。たとえば、UPDATEステートメントを使用します。

    DELETE:トリガーは、テーブルから行が削除されるたびにアクティブになります。たとえば、DELETE文とREPLACE文を使用します。 ただし、DELETEを使用しないため、表のDROP TABLE文およびTRUNCATE TABLE文ではこのトリガーはアクティブ化されません。

alter tableについては何も言いませんが、DML文だけがトリガを起動できると期待しています。

+0

+1ドキュメントを読んでいて、探していたものが見つかりませんでしたが、あなたの答えはドキュメントを読んでいない他のSOユーザにとって役に立ちます。 –

+0

InnoDB使用時のTRUNCATE TABLE文は、5.0.3より前のMySQLでは常にDELETEを使用し、その後は制約がある場合にDELETEを使用します。 –

0
PROCEDURE `pr_new_type`(IN column_name varchar(10)) 
BEGIN 
SET @queryText = CONCAT('ALTER TABLE `user_rights` ADD ', column_name, ' BINARY(9) NULL'); 
PREPARE query FROM @queryText; 
EXECUTE query; 
DEALLOCATE PREPARE query; 
END 

テストこの

+0

これはトリガーではなくプロシージャです。また、私の質問は、それぞれ、alterコマンドとdropコマンドで実行される2つのトリガを指していました。 –

関連する問題