MySQL 外部キーを無視してすべてのテーブルを削除する 質問する

MySQL 外部キーを無視してすべてのテーブルを削除する 質問する

MySQL データベースから、そこに含まれる可能性のある外部キー制約を無視してすべてのテーブルを削除する簡単な方法はありますか?

ベストアンサー1

生成されたドロップ ステートメントのセットは便利であることがわかったので、次の調整をお勧めします。

  1. 生成されたドロップを次のようにデータベースに制限します。
SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

注 1: これは DROP ステートメントを実行するのではなく、それらのリストを提供するだけです。実行するには、出力を切り取って SQL エンジンに貼り付ける必要があります。

DROP TABLE `VIEW_NAME`注 2: VIEW がある場合は、各ステートメントを手動で修正する必要がありますDROP VIEW `VIEW_NAME`

  1. 注記:ドロップテーブルカスケードによるドロップは無意味/誤解を招く恐れがあります。

「RESTRICT と CASCADE は移植を容易にするために許可されています。MySQL 5.5 では何もしません。」

したがって、ドロップ ステートメントを機能させるには、次のことが必要です。

SET FOREIGN_KEY_CHECKS = 0

これにより、参照整合性チェックが無効になります。必要なドロップの実行が完了したら、キーチェックをリセットする必要があります。

SET FOREIGN_KEY_CHECKS = 1
  1. 最終的な実行は次のようになります。
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;

注意: SELECT の出力をより簡単に使用するには、mysql -B オプションが役立ちます。

おすすめ記事