1つを除くすべてのテーブルをデータベースから削除しようとしていますが、次のエラーが発生します。
親行を削除または更新できません:外部キー制約が失敗します
もちろん、試行錯誤してそれらの主要な制約を確認し、最終的にすべてのテーブルを削除できますが、すべてのテーブルを強制的にドロップする高速な方法があるかどうかを知りたいと思います(それらを再挿入できるので削除したくない)。
Googleは、次の方法を提案するサイトを狙っていました。
mysql> SET foreign_key_checks = 0;
mysql> drop table ...
mysql> SET foreign_key_checks = 1;
簡単な答えは、テーブルを削除することができたときに同じエラーを受け取ったため、実際にはトリックを実行しなかったということです。特定のテーブルにリンクされているすべての外部キーを取得するスタックオーバーフローの方法を見てきましたが、すべてをスクリプト化しない限り時間がかかりすぎます(他のオプションがない場合に実行可能です)
データベースは4.1なので、DROP DATABASE
を使用できません
アイデア?
これは、検索でここにたどり着く人にとって有用かもしれません。 viewではなく、tableをドロップしようとしていることを確認してください。
SET foreign_key_checks = 0; -ドロップテーブル ドロップテーブル... -ドロップビュー ドロップビュー... SET foreign_key_checks = 1;
SET foreign_key_checks = 0
は外部キーチェックをオフに設定し、SET foreign_key_checks = 1
は外部キーチェックをオンに戻すことです。チェックがオフになっている間、テーブルをドロップできますが、テーブル構造の整合性を保つためにチェックがオンに戻ります。
phpmyadminを使用している場合、この機能はすでにあります。
次の手順を使用できますが、制約付きのテーブルを削除するために私のために働いた、解決策は上記のコメントですでに説明されています、私はちょうどそのためのスクリーンショットを追加しました-
ドロップデータベースは、MySQLのすべてのバージョンに存在します。しかし、テーブル構造を保持したい場合は、ここにアイデアがあります
mysqldump --no-data --add-drop-database --add-drop-table -hHOSTNAME -uUSERNAME -p> dump.sql
これはプログラムであり、mysqlコマンドではありません
次に、mysqlにログインして、
ソースdump.sql;
端末からすべてのテーブルを一度に削除するシンプルなソリューション
これには、mysqlシェル内のいくつかの手順が必要でした(ただし、1ステップのソリューションではありません)。
サーバーバージョンに対応:5.6.38 MySQL Community Server(GPL)
私が従ったステップ:
1. generate drop query using concat and group_concat.
2. use database
3. turn off / disable foreign key constraint check (SET FOREIGN_KEY_CHECKS = 0;),
4. copy the query generated from step 1
5. re enable foreign key constraint check (SET FOREIGN_KEY_CHECKS = 1;)
6. run show table
MySQLシェル
$ mysql -u root -p
Enter password: ****** (your mysql root password)
mysql> SYSTEM CLEAR;
mysql> SELECT CONCAT('DROP TABLE IF EXISTS `', GROUP_CONCAT(table_name SEPARATOR '`, `'), '`;') AS dropquery FROM information_schema.tables WHERE table_schema = 'emall_duplicate';
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| dropquery |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`; |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> USE emall_duplicate;
Database changed
mysql> SET FOREIGN_KEY_CHECKS = 0; Query OK, 0 rows affected (0.00 sec)
// copy and paste generated query from step 1
mysql> DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`;
Query OK, 0 rows affected (0.18 sec)
mysql> SET FOREIGN_KEY_CHECKS = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW tables;
Empty set (0.01 sec)
mysql>