Tôi có hai bảng, một 'người dùng' và một 'đơn đặt hàng', trong đó bảng thứ tự có một tham chiếu khóa ngoài tới bảng id người dùng. (. Tôi đang sử dụng địa chỉ email như sử dụng id trong trường hợp này)MySql Phím ngoài: ON DELETE NO ACTION behavour - cách để lại thông tin trong trường tham chiếu?
Những gì tôi muốn thực hiện điều này là:
Nếu id bảng người dùng được cập nhật (= chỉ email này đã được thay đổi), đây sẽ phản ánh trong trường user_id của bảng thứ tự được tham chiếu. (Điều này hoạt động tốt bằng cách sử dụng chỉ thị ON UPDATE CASCADE - không có vấn đề ở đây!)
Nếu người dùng bị xóa khỏi bảng người dùng, thứ tự sẽ vẫn giữ, giữ người dùng tham chiếu.
Tôi đang gặp vấn đề với mục tiêu thứ hai:
Nếu tôi sử dụng ON DELETE CASCADE trên trường id người dùng tham chiếu, hàng trật tự là tất nhiên bị xóa.
Nếu tôi sử dụng BẬT XÓA KHÔNG CÓ HÀNH ĐỘNG, tôi gặp lỗi khi cố gắng xóa người dùng. (# 1451 - Không thể xóa hoặc cập nhật hàng gốc: không có ràng buộc khóa ngoài)
Nếu tôi sử dụng ON DELETE SET NULL, tôi có thể xóa hàng người dùng, nhưng thông tin được tham chiếu được đặt thành null vì vậy tôi không thể theo dõi những người đã đặt hàng đó ...
Có cách nào để cho phép xóa người dùng khỏi bảng người dùng trong khi vẫn giữ thông tin user_id được tham chiếu trong bảng đơn đặt hàng không?
Cảm ơn bạn, Mark! Vì vậy, điều đó có nghĩa rằng nó không thể đạt được những gì tôi yêu cầu trong defintions nước ngoài tinh khiết ..? – Cambiata
@Cambiata: Đúng vậy, không thể "trong các định nghĩa khóa ngoài thuần túy". "Khóa ngoại" * có nghĩa là * giá trị tồn tại trong một bảng khác. Nếu bạn thực sự xóa hàng được tham chiếu từ bảng khác, bạn phải loại bỏ giá trị khóa ngoài bằng a) xóa toàn bộ hàng (ON DELETE CASCADE), hoặc b) đặt giá trị FK thành NULL (ON DELETE SET NULL) . –
Tôi hiểu. Tôi đã hy vọng rằng không có hành động alternatvie có nghĩa là, cũng ... không có hành động. Trong ý nghĩa là giá trị hiện tại sẽ không bị ảnh hưởng, hoạt động như một giá trị không phải là fk bình thường. Rõ ràng là không! Cảm ơn, Mark! – Cambiata