I use ON DELETE CASCADE
regularly but I never use ON UPDATE CASCADE
as I am not so sure in 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 parent_id = parent.id
will be automatically deleted. This should be no problem.
-
This means that
ON UPDATE CASCADE
will do the same thing whenid
of the parent is updated? -
If (1) is true, it means that there is no need to use
ON UPDATE CASCADE
ifparent.id
is not updatable (or will never be updated) like when it isAUTO_INCREMENT
or always set to beTIMESTAMP
. Is that right? -
If (2) is not true, in what other kind of situation should we use
ON UPDATE CASCADE
? -
What if I (for some reason) update the
child.parent_id
to be something not existing, will it then be automatically deleted?
Well, I know, some of the question above can be test programmatically to understand but I want also know if any of this is database vendor dependent or not.
Please shed some light.