1. ホーム
  2. mysql

[解決済み] MySQL DROP すべてのテーブル、外部キーを無視する

2022-03-20 23:50:16

質問

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

どのように解決するのですか?

私は、生成された一連のドロップステートメントが有用であることを発見し、これらの調整をお勧めします。

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

注1:これはDROP文の実行ではなく、DROP文のリストを表示するだけです。 実行するには、出力をカットしてSQLエンジンに貼り付ける必要があります。

注2:VIEWがある場合、それぞれのVIEWを修正する必要があります。 DROP TABLE `VIEW_NAME` ステートメントを DROP VIEW `VIEW_NAME` を手動で行う。

  1. 注)1. http://dev.mysql.com/doc/refman/5.5/en/drop-table.html カスケードで落とすのは意味がない/誤解を招く。

"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オプションが有効です。