"ON DELCE CASCADE" i düzenli olarak kullanıyorum, ancak "ON UPDATE CASCADE" i asla kullanmam, çünkü hangi durumda yararlı olacağından emin değilim.
Tartışma uğruna bazı kodları görelim.
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 CASCADE ON" için, bir ebeveyni olan bir ebeveyn id
silinirse, alt öğedeki bir kayıt parent_id = parent.id
otomatik olarak silinir. Bu hiç sorun değil.
Bu
id
, ebeveyn güncellendiğinde "ON UPDATE CASCADE" öğesinin aynı şeyi yapacağı anlamına mı geliyor?(1) doğruysa,
parent.id
güncellenebilir değilse (veya asla güncellenmeyecekse) olduğu gibiAUTO_INCREMENT
veya her zaman ayarlı olduğu gibi "ON UPDATE CASCADE" kullanmaya gerek yokturTIMESTAMP
. Bu doğru mu?(2) doğru değilse, başka hangi durumlarda "GÜNCELLEME KASKASINDA" kullanmalıyız?
Ya (bazı nedenlerden dolayı)
child.parent_id
mevcut olmayan bir şey olarak güncellersem, o zaman otomatik olarak silinir mi?
Eh, biliyorum, yukarıdaki sorunun bazıları programlı olarak anlamak için test olabilir, ancak bunların herhangi birinin veritabanı satıcısına bağlı olup olmadığını da bilmek istiyorum.
Lütfen biraz ışık tut.