私は「ON DELETE CASCADE」を定期的に使用していますが、「ON UPDATE CASCADE」を使用することはありません。
議論のために、いくつかのコードを見てみましょう。
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
自動的に削除されます。これは問題ありません。
これは
id
、親の更新時に「ON UPDATE CASCADE」が同じことを行うことを意味しますか?(1)がtrueの場合、
parent.id
更新可能でない(または更新されない)場合AUTO_INCREMENT
や、常にに設定されている場合は、「ON UPDATE CASCADE」を使用する必要がないことを意味しますTIMESTAMP
。そうですか?(2)が真でない場合、「ON UPDATE CASCADE」をどのような状況で使用する必要がありますか?
(何らかの理由で)を
child.parent_id
存在しないものに更新すると、自動的に削除されますか?
さて、上記の質問のいくつかはプログラムで理解してテストすることができますが、データベースベンダーに依存しているかどうかも知りたいです。
光を当ててください。