Hi All,
I use "ON DELETE CASCADE" regular but never use "ON UPDATE CASCADE" as I am not so sure what situation it will be useful.
For the sake of discussion let see some code.
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
);
For "ON DELETE CASCADE", if a parent with an 'id
' is deleted, a record in child with 'par_ind = id
' will be automatically deleted. This should be no problem.
(1) This means that "ON UPDATE CASCADE" will do the same think when 'id
' of the parent is updated?
(2) If (1) is true, It means that there is no need to use "ON UPDATE CASCADE" if 'parent.id
' is not updatable (or will never be updated) like when it is 'AUTO_INCREMENT'
or always set to be TIMESTAMP. Is that right?
(3) If (2) is not true, what other kind of situation we should use "ON UPDATE CASCADE".
(4) What if I (for some reason) update the 'child.parent_ind
' to be something none exist, will it be automatically deleted.
Well, I know, some of the question above can be test programmically to understand but I want also know if any of this is Database vendor dependent or not.
Please shed some light.