「ON UPDATE CASCADE」を使用する場合 質問する

「ON UPDATE CASCADE」を使用する場合 質問する

定期的に使用していますが、どのような状況で役立つかよくわからないため、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自動的に削除されます。これは問題にならないはずです。

  1. これは、親が更新されたON UPDATE CASCADE場合にも同じことが行われることを意味しますか?id

  2. (1) が真であれば、が更新可能でない(または決して更新されない)場合は、 である場合や常に に設定されているON UPDATE CASCADE場合にを使用する必要がないことを意味します。これは正しいですか?parent.idAUTO_INCREMENTTIMESTAMP

  3. (2)が真でない場合、どのような状況で使用すればよいでしょうかON UPDATE CASCADE

  4. 何らかの理由でchild.parent_idを存在しないものに更新した場合、自動的に削除されますか?

そうですね、上記の質問のいくつかはプログラムでテストして理解できると思いますが、これらのいずれかがデータベースベンダーに依存しているかどうかも知りたいです。

どうか光を当ててください。

ベストアンサー1

確かに、主キーが単に自動的に増分される ID 値である場合、 は実際には役に立ちませんON UPDATE CASCADE

ただし、主キーが 10 桁の UPC バーコードであり、拡張のために 13 桁の UPC バーコードに変更する必要がある場合は、 を使用するとON UPDATE CASCADE主キーの値を変更でき、その値への外部キー参照を持つテーブルもそれに応じて変更されます。

4 に関して言えば、子 ID を親テーブルに存在しないものに変更すると (参照整合性がある場合)、外部キー エラーが発生します。

おすすめ記事