Force drop mysql bypassing foreign key constraint

后端 未结 6 770
别跟我提以往
别跟我提以往 2021-01-29 18:08

I\'m trying to delete all tables from a database except one, and I end up having the following error:

Cannot delete or update a parent row: a foreign key

相关标签:
6条回答
  • 2021-01-29 18:37

    You can use the following steps, its worked for me to drop table with constraint,solution already explained in the above comment, i just added screen shot for that -enter image description here

    0 讨论(0)
  • 2021-01-29 18:45

    Since you are not interested in keeping any data, drop the entire database and create a new one.

    0 讨论(0)
  • 2021-01-29 18:53

    If you are using phpmyadmin then this feature is already there.

    • Select the tables you want to drop
    • From the dropdown at the bottom of tables list, select drop
    • A new page will be opened having checkbox at the bottom saying "Foreign key check", uncheck it.
    • Confirm the deletion by accepting "yes".
    0 讨论(0)
  • 2021-01-29 18:54

    Drop database exist in all versions of MySQL. But if you want to keep the table structure, here is an idea

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

    This is a program, not a mysql command

    Then, log into mysql and

    source dump.sql;

    0 讨论(0)
  • 2021-01-29 18:58

    This might be useful to someone ending up here from a search. Make sure you're trying to drop a table and not a view.

    SET foreign_key_checks = 0;
    -- Drop tables
    drop table ...
    -- Drop views
    drop view ...
    SET foreign_key_checks = 1;
    

    SET foreign_key_checks = 0 is to set foreign key checks to off and then SET foreign_key_checks = 1 is to set foreign key checks back on. While the checks are off the tables can be dropped, the checks are then turned back on to keep the integrity of the table structure.

    0 讨论(0)
  • 2021-01-29 19:00

    Simple solution to drop all the table at once from terminal.

    This involved few steps inside your mysql shell (not a one step solution though), this worked me and saved my day.

    Worked for Server version: 5.6.38 MySQL Community Server (GPL)

    Steps I followed:

     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 shell

    $ 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> 
    
    0 讨论(0)
提交回复
热议问题