MySQL データベースから、そこに含まれる可能性のある外部キー制約を無視してすべてのテーブルを削除する簡単な方法はありますか?
ベストアンサー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`
。
- 注記:ドロップテーブルカスケードによるドロップは無意味/誤解を招く恐れがあります。
「RESTRICT と CASCADE は移植を容易にするために許可されています。MySQL 5.5 では何もしません。」
したがって、ドロップ ステートメントを機能させるには、次のことが必要です。
SET FOREIGN_KEY_CHECKS = 0
これにより、参照整合性チェックが無効になります。必要なドロップの実行が完了したら、キーチェックをリセットする必要があります。
SET FOREIGN_KEY_CHECKS = 1
- 最終的な実行は次のようになります。
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;
注意: SELECT の出力をより簡単に使用するには、mysql -B オプションが役立ちます。