Tôi sử dụng "TRÊN XÓA CASCADE" thường xuyên nhưng tôi không bao giờ sử dụng "TRÊN CẬP NHẬT CASCADE" vì tôi không chắc chắn trong tình huống nào nó sẽ hữu ích.
Để thảo luận, hãy xem một số mã.
CREATE TABLE parent (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE child (
id INT NOT NULL AUTO_INCREMENT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
);
Đối với "BẬT XÓA CASCADE", nếu cha mẹ có một id
bị xóa, một bản ghi trong con với parent_id = parent.id
sẽ tự động bị xóa. Điều này sẽ không có vấn đề.
Điều này có nghĩa là "TRÊN CẬP NHẬT CASCADE" sẽ làm điều tương tự khi
id
cha mẹ được cập nhật?Nếu (1) là đúng, điều đó có nghĩa là không cần sử dụng "TRÊN CẬP NHẬT CASCADE" nếu
parent.id
không thể cập nhật (hoặc sẽ không bao giờ được cập nhật) như khi nóAUTO_INCREMENT
luôn luôn được đặt thànhTIMESTAMP
. Có đúng không?Nếu (2) không đúng, trong trường hợp nào khác, chúng ta nên sử dụng "TRÊN CẬP NHẬT CASCADE"?
Điều gì sẽ xảy ra nếu tôi (vì một số lý do) cập nhật thành
child.parent_id
một thứ không tồn tại, sau đó nó sẽ tự động bị xóa?
Vâng, tôi biết, một số câu hỏi ở trên có thể được kiểm tra theo chương trình để hiểu nhưng tôi cũng muốn biết liệu đây có phải là nhà cung cấp cơ sở dữ liệu hay không.
Xin hãy làm sáng tỏ.