Tôi có bảng này trong đó tôi lưu trữ nhận xét. Mọi nhận xét đều có ID riêng và cột isReply
trong trường hợp nhận xét là câu trả lời cho nhận xét khác. Tôi đã tự hỏi nếu tôi có thể thiết lập một mối quan hệ để khi một bình luận được xóa tất cả các ý kiến được trả lời cho rằng bình luận sẽ bị xóa tự động. Tôi đã cố gắng thiết lập một chính nước ngoài để cột isReply
tham khảo comments.id
nhưng tôi đã nhận lỗi này:Khóa ngoài của MySQL trên cùng một bảng
#
1452 - Cannot add or update a child row: a foreign key constraint fails (_db
.#sql-1030_31f
, CONSTRAINT#sql-1030_31f_ibfk_1
FOREIGN KEY (isReply
) REFERENCEScomments
(id
) ON DELETE CASCADE ON UPDATE NO ACTION)
Bạn có thể tạo một sqlfiddle được đơn giản hóa hiển thị lỗi ở trên không? BTW, Đừng quên giới hạn này: http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html * Một tự tham khảo ON DELETE SET NULL, mặt khác , là có thể, như là một tự giới thiệu ON DELETE CASCADE. Các hoạt động xếp tầng có thể không được lồng sâu hơn 15 cấp độ. * – biziclop
'DELETE c1 TỪ nhận xét c1 LEFT THAM GIA các bình luận c2 ON c2.id = c1.isReply WHERE c2.id IS NULL'. Điều này sẽ xóa tất cả trả lời cho các nhận xét đã xóa. Sau đó, thêm một FK sẽ làm việc. Thay vì xóa một cách khác có thể 'UPDATE ... LEFT JOIN ... ON ... SET c1.isReply = NULL WHERE ...'. –