今日、MySQL ですべてのテーブルを削除する必要がありました。 本番サーバーには、私の開発環境で MySQL データベースを管理するためのお気に入りのツールである phpMyAdmin がありません。
私がいつも言っているように、「Google it」です。
SOWでエレガントなスクリプトを発見しました。
SET FOREIGN_KEY_CHECKS = 0;
この行では外部キー制約を無効化しています。 2つのテーブルが互いに関連している場合、どちらかのテーブルを削除することはできません。
SET GROUP_CONCAT_MAX_LEN=32768;
この行は、CONCAT関数の最大長を設定します。 スクリプトの次の行で、連結が表示されます。 MySQL の設定によっては、この値が低すぎることがあります。
SET @tables = NULL;
これはテーブルの名前を格納するための変数です。 SELECT DATABASE()は、現在使用されているデータベースを決定するために使用されます。 この行は、現在のデータベース内のテーブルのリストを選択し、(`)文字で装飾し、最終結果は、`table_1`, `table_2`, …, `table_n` のようにテーブル変数に格納されます。
SELECT IFNULL(@tables,'dummy') INTO @tables;
テーブル変数がNULLであればこの行で “dummy” と入力します。
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
変数tablesの前に “DROP TABLE IF EXISTS “を追加しています。 つまり、最終結果はDROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n` となります。
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
この3行を分ける必要はないでしょう。
SET FOREIGN_KEY_CHECKS = 1;
最後に、この行は外部キー制約チェックオプションを有効にしています。 本当に便利です。 このスクリプトがどのように動作するかを理解するのに役立つことを願っています。