[mysql] 외래 키 제약 조건을 무시하고 mysql을 강제로 삭제하십시오.

하나를 제외하고 데이터베이스에서 모든 테이블을 삭제하려고하는데 다음과 같은 오류가 발생합니다.

부모 행을 삭제하거나 업데이트 할 수 없습니다. 외래 키 제약 조건이 실패합니다

물론 그 키 제약 조건이 무엇인지 확인하고 결국 모든 테이블을 삭제하기 위해 시행 착오를 할 수는 있지만 모든 테이블을 강제로 삭제하는 빠른 방법이 있는지 알고 싶습니다. 삭제하고 싶지 않습니다).

Google은 다음 방법을 제안하는 일부 사이트를 목표로 삼았습니다.

mysql> SET foreign_key_checks = 0;
mysql> drop table ...
mysql> SET foreign_key_checks = 1;

짧은 대답은 더 많은 테이블을 삭제할 수 있지만 동일한 오류가 발생하여 실제로 트릭을 수행하지 않았다는 것입니다. 스택 오버플로 방법에서 모든 외래 키를 특정 테이블에 연결하는 방법을 보았지만 스크립트를 모두 작성하지 않으면 너무 많은 시간이 걸립니다 (다른 옵션이없는 경우 가능)

데이터베이스가 4.1이므로 사용할 수 없습니다 DROP DATABASE

아이디어?



답변

데이터 유지에 관심이 없으므로 전체 데이터베이스를 삭제하고데이터베이스 를 작성하십시오.


답변

이것은 검색으로 끝나는 누군가에게 유용 할 수 있습니다. 뷰가 아닌 테이블 을 삭제하려고합니다 .

SET foreign_key_checks = 0;
-테이블 삭제
테이블 삭제 ...
-뷰 삭제
드롭 뷰 ...
SET foreign_key_checks = 1;

SET foreign_key_checks = 0외래 키 검사를 해제 SET foreign_key_checks = 1로 설정하고 외래 키 검사를 다시 설정하는 것입니다. 점검이 해제되어있는 동안 테이블을 제거 할 수 있지만 점검은 테이블 구조의 무결성을 유지하기 위해 다시 설정됩니다.


답변

당신이 사용하는 경우 에 phpMyAdmin을 다음이 기능은 이미 존재한다.

  • 삭제하려는 테이블을 선택하십시오.
  • 테이블 목록의 맨 아래에있는 드롭 다운에서 드롭을 선택하십시오.
  • 하단에 “외국 키 확인”이라는 확인란이있는 새 페이지가 열리면 선택을 취소하십시오.
  • “예”를 수락하여 삭제를 확인하십시오.

답변

다음 단계를 사용할 수 있으며 제약 조건이있는 테이블을 삭제하는 데 도움이되었으며 위의 설명에서 이미 설명한 솔루션은 방금 스크린 샷을 추가했습니다.여기에 이미지 설명을 입력하십시오


답변

Drop 데이터베이스는 모든 버전의 MySQL에 존재합니다. 그러나 테이블 구조를 유지하려면 아이디어가 있습니다.

mysqldump –no-data –add-drop-database –add-drop-table -hHOSTNAME -uUSERNAME -p> dump.sql

이것은 mysql 명령이 아닌 프로그램입니다.

그런 다음 mysql에 로그인하고

소스 dump.sql;


답변

터미널에서 모든 테이블을 한 번에 삭제하는 간단한 솔루션.

이것은 mysql 셸 내부에 몇 단계가 포함되어 있지만 (한 단계 솔루션은 아님), 저에게 도움이되고 하루를 저축했습니다.

서버 버전에서 작동 함 : 5.6.38 MySQL 커뮤니티 서버 (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> 


답변