Tôi đang cố xóa từ nhiều bảng. Đây là những gì bàn của tôi trông giống nhưXóa khỏi nhiều bảng có ràng buộc nước ngoài
A_has_B ---- B ---- C_has_B
(many to many) (many to many)
Tôi cố gắng để xóa tất cả các hàng từ A_has_B, B và C_has_B đưa ID của một kỷ lục trong B. Tôi đang sử dụng MySQL với công cụ lưu trữ InnoDB với các phím nước ngoài quy định cho A_has_B và C_has_B tham khảo ID trong B.
tôi cố gắng để thực hiện tôi xóa như vậy:
DELETE A_has_B.*, C_has_B.*, B.*
FROM
A
join
B
on (B.B_id = A.B_id)
join
C
on (C.B_id = B.B_id)
where B.B_id IN(1,2, 4);
vấn đề là khi tôi thực hiện truy vấn, mysql than phiền:
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`db`.`C`, CONSTRAINT `fk_C` FOREIGN KEY (`B_id`) REFERENCES `B` (`B_id`) ON DELETE NO ACTION ON UPDATE NO)
Tôi làm cách nào để khắc phục vấn đề này?
Cảm ơn câu trả lời của bạn :) Có chắc chắn không thể xóa bằng một câu lệnh không? Tôi có thể nghĩ rằng có lẽ tôi có thể buộc MySQL xóa khỏi bảng intersectoin trước khi xóa khỏi B. – F21
Trong SQL, bản chất của 'transactional' được thiết kế để cho phép nhiều câu lệnh hoàn thành * as-if * chúng là một câu lệnh đơn . Thay vì triển khai cả một ngôn ngữ phức tạp không thể hiểu được và một động cơ/trình tối ưu hóa không thể phức tạp.Vì vậy, nếu điều quan trọng là mọi thứ đều bị xóa "cùng một lúc", hãy xem xét các giao dịch :) – MatBailie