定期的に使用していますが、どのような状況で役立つかよくわからないため、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
自動的に削除されます。これは問題にならないはずです。
これは、親が更新された
ON UPDATE CASCADE
場合にも同じことが行われることを意味しますか?id
(1) が真であれば、が更新可能でない(または決して更新されない)場合は、 である場合や常に に設定されている
ON UPDATE CASCADE
場合にを使用する必要がないことを意味します。これは正しいですか?parent.id
AUTO_INCREMENT
TIMESTAMP
(2)が真でない場合、どのような状況で使用すればよいでしょうか
ON UPDATE CASCADE
?何らかの理由で
child.parent_id
を存在しないものに更新した場合、自動的に削除されますか?
そうですね、上記の質問のいくつかはプログラムでテストして理解できると思いますが、これらのいずれかがデータベースベンダーに依存しているかどうかも知りたいです。
どうか光を当ててください。
ベストアンサー1
確かに、主キーが単に自動的に増分される ID 値である場合、 は実際には役に立ちませんON UPDATE CASCADE
。
ただし、主キーが 10 桁の UPC バーコードであり、拡張のために 13 桁の UPC バーコードに変更する必要がある場合は、 を使用するとON UPDATE CASCADE
主キーの値を変更でき、その値への外部キー参照を持つテーブルもそれに応じて変更されます。
4 に関して言えば、子 ID を親テーブルに存在しないものに変更すると (参照整合性がある場合)、外部キー エラーが発生します。