ฉันใช้ "ON DELETE CASCADE" เป็นประจำ แต่ฉันไม่เคยใช้ "ON CASCADE UPDATE" เนื่องจากฉันไม่แน่ใจในสถานการณ์ที่จะเป็นประโยชน์
เพื่อประโยชน์ของการสนทนาให้ดูรหัสบางส่วน
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
);
สำหรับ "ON DELETE CASCADE" หากผู้ปกครองที่id
ถูกลบระเบียนในเด็กที่มีparent_id = parent.id
จะถูกลบโดยอัตโนมัติ นี่น่าจะไม่มีปัญหา
ซึ่งหมายความว่า "ON CASCADE UPDATE" จะทำสิ่งเดียวกันเมื่อ
id
มีการอัปเดตพาเรนต์หรือไม่ถ้า (1) เป็นจริงก็หมายความว่าไม่มีความจำเป็นต้องใช้ "ON UPDATE CASCADE" ถ้า
parent.id
ไม่สามารถปรับปรุงได้ (หรือจะไม่ได้รับการปรับปรุง) เช่นเมื่อมันเป็นหรือตั้งค่าเสมอที่จะAUTO_INCREMENT
TIMESTAMP
นั่นถูกต้องใช่ไหม?หาก (2) ไม่เป็นความจริงเราควรใช้ "ON CASCADE UPDATE" ในสถานการณ์แบบใด
จะเกิดอะไรขึ้นถ้าฉัน (ด้วยเหตุผลบางอย่าง) อัปเดต
child.parent_id
เป็นสิ่งที่ไม่มีอยู่แล้วจะถูกลบโดยอัตโนมัติหรือไม่
ฉันรู้ว่าคำถามบางข้อข้างต้นสามารถทดสอบได้โดยทางโปรแกรมเพื่อให้เข้าใจ แต่ฉันต้องการทราบด้วยเช่นกันว่าเรื่องใด ๆ นี้ขึ้นอยู่กับผู้ขายฐานข้อมูลหรือไม่
กรุณาส่องแสง