Paksa jatuhkan mysql dengan melewati batasan kunci asing

134

Saya mencoba untuk menghapus semua tabel dari database kecuali satu, dan saya akhirnya mengalami kesalahan berikut:

Tidak dapat menghapus atau memperbarui baris induk: batasan kunci asing gagal

Tentu saja saya bisa coba-coba untuk melihat apa kendala utama itu dan akhirnya menghapus semua tabel tapi saya ingin tahu apakah ada cara cepat untuk memaksa drop semua tabel (karena saya akan dapat memasukkan kembali yang saya tidak ingin dihapus).

Google mengarahkan saya ke beberapa situs yang menyarankan metode berikut:

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

Jawaban singkatnya adalah itu tidak benar-benar melakukan trik karena saya akhirnya menerima kesalahan yang sama sementara saya bisa menghapus beberapa tabel lagi. Saya telah melihat pada cara Stack Overflow untuk menghubungkan semua kunci asing ke tabel tertentu tapi itu terlalu memakan waktu kecuali saya skrip semuanya (yang bisa dilakukan dalam kasus tidak ada pilihan lain)

Database 4.1, jadi saya tidak bisa menggunakan DROP DATABASE

Ide ide?

johnnyArt
sumber
1
Mengapa Anda memilih jawaban yang dipilih yang bahkan tidak memberikan solusi untuk pertanyaan Anda?
Sanjay

Jawaban:

-40

Karena Anda tidak tertarik untuk menyimpan data apa pun, jatuhkan seluruh database dan buat yang baru.

Otávio Décio
sumber
3
Ya ampun, saya merasa sangat bodoh sekarang, saya mengganti kata DATABASE dengan nama sebenarnya dari database alih-alih menambahkannya setelah itu, terima kasih +1
johnnyArt
13
ini bukan jawabannya
Freelancer
8
Sangat lucu melihat jawaban ini dicentang dan
dibesarkan
4
@RobertPounder, itulah tujuan saya, dan sejak saya bergabung dengan situs ini. Saya menghargai sudut pandang Anda.
Otávio Décio
3
@RobertPounder SO sedikit lebih dari sekadar membantu OPs, ini setara dengan sumber daya "cara" yang dapat ditelusuri, saya mendapatkan topik ini karena saya perlu menonaktifkan pemeriksaan kendala kunci asing, dan Google mengarahkan saya ke sini. Saya senang menjatuhkan database adalah solusi yang baik untuk OP, tetapi jawaban di bawah ini benar untuk pertanyaan "Force drop mysql bypassing foreign key constraint".
Val Redchenko
404

Ini mungkin berguna untuk seseorang yang berakhir di sini dari pencarian. Pastikan Anda mencoba menjatuhkan a tabel dan bukan tampilan .

SET foreign_key_checks = 0;
- Jatuhkan tabel
drop table ...
- Jatuhkan tampilan
jatuhkan tampilan ...
SET foreign_key_checks = 1;

SET foreign_key_checks = 0adalah untuk mengatur pemeriksaan kunci asing ke off dan kemudian SET foreign_key_checks = 1untuk mengatur pemeriksaan kunci asing kembali. Sementara cek dari tabel dapat dijatuhkan, pemeriksaan kemudian dihidupkan kembali untuk menjaga integritas struktur tabel.

MENEPUK
sumber
43
PAT adalah temanku!
SeanDowney
5
Ini adalah jawaban yang benar dan lebih baik. Memecahkan masalah apakah menghapus semua tabel, atau hanya beberapa. Hebat!
Luke Stevenson
@PAT Terima kasih banyak, Berhasil. meskipun itu tidak bisa berfungsi di browser Mysql Query. Kamu menyelamatkan hariku.
Ny.
bekerja dengan baik, saya menggunakan ini karena saya tidak bisa menjatuhkan seluruh database
Pablo Pazos
1
Saya setuju bahwa ini biasanya solusi yang tepat tetapi @johnnyArt, yang mengajukan pertanyaan, secara khusus mengecualikan ini sebagai opsi yang layak karena tidak berhasil untuknya. Jadi sepertinya ini bukan jawaban yang benar untuk pertanyaan awal, bukan?
David
18

Jika Anda menggunakan phpmyadmin maka fitur ini sudah ada di sana.

  • Pilih tabel yang ingin Anda jatuhkan
  • Dari dropdown di bagian bawah daftar tabel, pilih drop
  • Halaman baru akan terbuka dengan kotak centang di bagian bawah mengatakan "Pemeriksaan kunci asing", hapus centang.
  • Konfirmasikan penghapusan dengan menerima "ya".
Ali Azhar
sumber
3
Kamu menyelamatkan hariku! Terima kasih! Bekerja seperti pesona!
Kami
4

Anda dapat menggunakan langkah-langkah berikut, ini berhasil bagi saya untuk menjatuhkan tabel dengan kendala, solusi sudah dijelaskan dalam komentar di atas, saya hanya menambahkan tangkapan layar untuk itu -masukkan deskripsi gambar di sini

srinivas
sumber
Ini adalah duplikat dari jawaban pilihan tertinggi, yang diposting empat tahun sebelumnya.
chb
3

Drop database ada di semua versi MySQL. Tetapi jika Anda ingin mempertahankan struktur tabel, berikut adalah sebuah ide

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

Ini adalah program, bukan perintah mysql

Kemudian, masuk ke mysql dan

source dump.sql;

MindStalker
sumber
1

Solusi sederhana untuk menjatuhkan semua tabel sekaligus dari terminal.

Ini melibatkan beberapa langkah di dalam shell mysql Anda (bukan solusi satu langkah), ini berhasil dan menyelamatkan saya.

Bekerja untuk versi Server: 5.6.38 MySQL Community Server (GPL)

Langkah-langkah yang saya ikuti:

 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

Shell 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> 
Sanjay
sumber