Saya menggunakan "ON DELETE CASCADE" secara teratur tetapi saya tidak pernah menggunakan "ON UPDATE CASCADE" karena saya tidak begitu yakin dalam situasi apa ini akan berguna.
Demi diskusi, mari kita lihat beberapa kode.
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
);
Untuk "ON DELETE CASCADE", jika orang tua dengan yang id
dihapus, catatan pada anak dengan parent_id = parent.id
akan dihapus secara otomatis. Ini seharusnya tidak menjadi masalah.
Ini berarti "ON UPDATE CASCADE" akan melakukan hal yang sama ketika
id
induknya diperbarui?Jika (1) benar, itu berarti bahwa tidak perlu menggunakan "ON UPDATE CASCADE" jika
parent.id
tidak dapat diupdate (atau tidak akan pernah diperbarui) seperti ketika ituAUTO_INCREMENT
atau selalu diatur untuk menjadiTIMESTAMP
. Apakah itu benar?Jika (2) tidak benar, dalam situasi apa kita harus menggunakan "ON UPDATE CASCADE"?
Bagaimana jika saya (karena alasan tertentu) memperbarui
child.parent_id
menjadi sesuatu yang tidak ada, kemudian akan dihapus secara otomatis?
Yah, saya tahu, beberapa pertanyaan di atas dapat diuji secara terprogram untuk dipahami tetapi saya ingin juga tahu apakah semua ini tergantung pada vendor database atau tidak.
Tolong beri sedikit cahaya.