Dưới đây là một lựa chọn mà tạo ra hoàn toàn thả và tạo báo cáo cho tất cả các mối quan hệ trên một cái bàn. Không tự động trong bất kỳ cách nào, nhưng dễ dàng đủ để sao chép/dán từ ..
SELECT `DROP`,`CREATE` FROM (
SELECT
CONCAT("ALTER TABLE `", `K`.`TABLE_NAME`, "` DROP FOREIGN KEY `", `K`.`CONSTRAINT_NAME`, "`;") "DROP",
CONCAT("ALTER TABLE `",
`K`.`TABLE_NAME`,
"` ADD CONSTRAINT ",
"`fk_",
`K`.`TABLE_NAME`,
"_",
`K`.`REFERENCED_TABLE_NAME`,
"1",
"` FOREIGN KEY (`",
`K`.`COLUMN_NAME`,
"`) REFERENCES ",
"`",
`K`.`REFERENCED_TABLE_SCHEMA`,
"`.`",
`K`.`REFERENCED_TABLE_NAME`,
"` (`",
`K`.`REFERENCED_COLUMN_NAME`,
"`) ON DELETE ",
`C`.`DELETE_RULE`,
" ON UPDATE ",
`C`.`UPDATE_RULE`,
";") "CREATE"
FROM `information_schema`.`KEY_COLUMN_USAGE` `K`
LEFT JOIN `information_schema`.`REFERENTIAL_CONSTRAINTS` `C` USING (`CONSTRAINT_NAME`)
WHERE `K`.`REFERENCED_TABLE_SCHEMA` = "your_db"
AND `K`.`REFERENCED_TABLE_NAME` = "your_table") AS DropCreateConstraints
tôi sử dụng nó để thả tất cả các mối quan hệ, thay đổi các kiểu dữ liệu trên các phím và sau đó khôi phục lại mối quan hệ với những cái tên quan trọng nước ngoài á la MySQL Workbench. Có thể hữu ích cho ai đó ..
Đối với tôi nhận được lỗi như 'Không thể xóa hoặc cập nhật hàng mẹ: một ràng buộc khoá ngoại thất bại'. Tôi đã cố tạo từng hàng rồi chỉ cho một hàng bị lỗi, số khác bị xóa. – Pramod
"Chắc chắn" hầu như không. Trong các bảng thế giới thực thường là quá lớn cho điều này là khả thi. Không có cách nào để thao tác các chỉ mục mà không cần tạo lại toàn bộ bảng? (Có: xem giải pháp tuyệt vời của Dandalf!) –