クローンを作成したDBがあり、すべてのログトリガーが元のスキーマのログテーブルを指している。それらを再作成できるように、一度にすべてを削除する必要があります(数十あります)。これは1つのコマンドでどのように実行できますか?
9 に答える
これは古い質問ですが、検索で頻繁に出てくる質問なので、ここに解決策を投稿すると思いました。私の場合、完全な を持つ単一のファイルを作成する必要がありmysqldump
、トリガーを削除してから、すべてを再度追加しました。DROP TRIGGER
トリガーのダンプを追加する前に、次のコマンドを使用してステートメントをダンプに追加することで、それを行うことができました。
mysql -u [db user] -p[db password] --skip-column-names [db name] -e 'SHOW TRIGGERS;' | cut -f1 | sed -r 's/(.*)/DROP TRIGGER IF EXISTS \1;/' >> dump.sql
実際に同じコマンドですべてのトリガーを削除するには (コメントで @Stephen Crosby が言及しているように)、次のようにこれを MySQL にパイプするだけです。
mysql -u [db user] -p[db password] --skip-column-names [db name] -e 'SHOW TRIGGERS;' | cut -f1 | sed -r 's/(.*)/DROP TRIGGER IF EXISTS \1;/' | mysql -u [db user] -p[db password] [db name]
SELECT Trigger_Name
FROM `information_schema`.`TRIGGERS`
WHERE TRIGGER_SCHEMA = 'your_schema';
結果をクリップボードにコピー
reg.expressions で行頭と行末に ^ タグと S タグを使用して各トリガーに変換Trigger_name
します。DROP TRIGGER <trigger_name>;
SQLスクリプトとして実行
この目的のための単一のコマンドの存在についてはよくわかりません。
しかし、これが私がしばらく前にそれをした方法です
- データベース内のトリガーのリストを取得するスクリプトを記述します。
- dropTrigger.sqlファイルに連結リストを作成します
- dropTrigger.SQLファイルを実行します
トリガーのリストを取得するには、情報スキーマでSHOWトリガーまたは トリガーテーブルを使用できます。
簡単な答えは「いいえ」です。
ただし、ロジックを 1 つのストアド プロシージャにカプセル化することはできます。つまり、すべてのトリガーを取得し、動的 SQL を使用してループ内ですべてのトリガーを削除します。
その後、実行できます:call delete_all_triggers_api(schema_name);