1. ホーム
  2. sql

[解決済み] "ON UPDATE CASCADE "を使用する場合について

2022-03-20 08:54:19

質問

私が使っているのは 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.id のように更新されない(あるいは更新されない)。 AUTO_INCREMENT に設定されているか、常に TIMESTAMP . これでいいのでしょうか?

  3. もし(2)が正しくないとしたら、他にどのような場面で ON UPDATE CASCADE ?

  4. を更新した場合はどうなりますか? child.parent_id に変更した場合、自動的に削除されますか?

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

よろしくお願いします。

どのように解決するのですか?

確かに、主キーが単なる ID 値のオートインクリメントであれば ON UPDATE CASCADE .

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

4に関連して、子IDを親テーブルに存在しないものに変更した場合(そして参照整合性がある場合)、外部キーエラーが発生するはずです。