2010-02-19 28 views
104

Tôi đang cố gắng để xóa tất cả các bảng từ một cơ sở dữ liệu ngoại trừ một, và tôi kết thúc có lỗi sau:Force thả mysql bỏ qua nước ngoài chủ chốt hạn chế

Cannot delete or update a parent row: a foreign key constraint fails

Dĩ nhiên tôi có thể thử và sai để xem những gì những hạn chế chính đó và cuối cùng xóa tất cả các bảng nhưng tôi muốn biết nếu có một cách nhanh chóng để buộc thả tất cả các bảng (vì tôi sẽ có thể chèn lại những bảng mà tôi không muốn xóa).

Google nhằm tôi tại một số trang web đó đề nghị các phương pháp sau đây:

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

Câu trả lời ngắn là nó không thực sự làm các trick kể từ khi tôi đã kết thúc nhận được lỗi tương tự trong khi tôi đã có thể xóa một số chi tiết những cái bàn. Tôi đã nhìn thấy trên Stack Overflow cách để có được tất cả các phím nước ngoài liên kết với một bảng nhất định nhưng đó là cách quá tốn thời gian trừ khi tôi kịch bản tất cả (đó là doable trong trường hợp không có tùy chọn khác)

Cơ sở dữ liệu là 4,1 Tôi không thể sử dụng DROP DATABASE

Ý tưởng?

Trả lời

-14

Vì bạn không muốn giữ bất kỳ dữ liệu nào, hãy drop the entire database và tạo một dữ liệu mới.

+0

Quên cơ sở dữ liệu không phải là mysql 5.x nhưng 4.x có nghĩa là tôi không thể sử dụng lệnh đó – johnnyArt

+1

Tôi nghĩ bạn nên - http://dev.mysql.com/doc/refman /4.1/en/drop-database.html –

+2

Ôi trời, tôi cảm thấy ngớ ngẩn bây giờ, tôi đã thay thế từ DATABASE bằng tên cơ sở dữ liệu thực tế thay vì thêm nó sau đó, cảm ơn cả +1 – johnnyArt

3

Thả cơ sở dữ liệu tồn tại trong tất cả các phiên bản của MySQL. Nhưng nếu bạn muốn giữ lại cấu trúc bảng, đây là một ý tưởng

mysqldump --no-dữ liệu --add-thả cơ sở dữ liệu --add-thả bảng -hHOSTNAME -uUSERNAME -p> dump.sql

Đây là một chương trình, không phải là một lệnh mysql

Sau đó, đăng nhập vào mysql và

nguồn dump.sql;

302

Điều này có thể hữu ích đối với người nào đó kết thúc ở đây từ tìm kiếm. Đảm bảo bạn đang cố gắng thả một bảng và không phải là xem.

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

SET foreign_key_checks = 0 là đặt kiểm tra khóa ngoài thành tắt và sau đó SET foreign_key_checks = 1 là đặt lại kiểm tra khóa ngoài. Trong khi các kiểm tra được tắt các bảng có thể được giảm xuống, các kiểm tra sau đó được bật trở lại để giữ tính toàn vẹn của cấu trúc bảng. ảnh chụp màn hình

+27

PAT là bạn của tôi! – SeanDowney

+5

Đây là câu trả lời đúng hơn. Giải quyết vấn đề cho dù xóa tất cả các bảng hay chỉ một vài bảng. Khủng khiếp! –

+0

Cảm ơn rất nhiều người, tôi đã thực sự cảm thấy thất vọng về điều này. –

4

Bạn có thể sử dụng các bước sau đây, làm việc của nó cho tôi để thả bảng với khó khăn, giải pháp đã được giải thích trong những nhận xét trên, tôi chỉ cần thêm cho điều đó - enter image description here

12

Nếu bạn đang sử dụng phpmyadmin sau đó tính năng này đã có sẵn.

  • Chọn các bảng bạn muốn thả
  • Từ menu thả xuống ở dưới cùng của danh sách bảng, chọn thả
  • Một trang mới sẽ được mở ra có hộp kiểm ở dưới cùng nói "kiểm tra chính nước ngoài", bỏ chọn nó.
  • Xác nhận việc xóa bằng cách chấp nhận "có".
+0

Bạn đã lưu ngày của tôi! Cảm ơn! Làm việc như người ở! – Kami

+0

Cách duy nhất nó làm việc cho tôi. Cảm ơn ! – paulalexandru

Các vấn đề liên quan