1

ユーザー、オファー、ジャンクション テーブル users_offers があります。

ユーザーまたはオファーを削除したときにジャンクション データが自動的に削除されるように、外部キー リレーションを使用して実行できるセットアップはありますか?

4

2 に答える 2

2

参照アクションを宣言します: ON DELETE CASCADE。例:

CREATE TABLE user (
    user_id int PRIMARY KEY
);

CREATE TABLE offer (
    offer_id int PRIMARY KEY
);

CREATE TABLE user_offer (
    user_id int,
    offer_id int,
    PRIMARY KEY (user_id, offer_id),
    FOREIGN KEY (user_id) REFERENCES user (user_id) ON DELETE CASCADE,
    FOREIGN KEY (user_id) REFERENCES offer (offer_id) ON DELETE CASCADE
);

[SQLフィドル]

興味深いことに、「省略形」の外部キー構文で参照アクションを指定しても機能しないようです (MySQL 5.5.30、5.6.6 m9 で確認済み)。以下は解析されますが、userが削除されても、対応するものは削除user_offerされません。

CREATE TABLE user_offer (
    user_id int REFERENCES user (user_id) ON DELETE CASCADE,
    offer_id int REFERENCES offer (offer_id) ON DELETE CASCADE,
    PRIMARY KEY (user_id, offer_id)
);
于 2013-04-21T01:27:32.710 に答える
1

モデル作成でこれを指定できます。

CREATE TABLE users_offers (user_id INT NOT NULL,
                           offer_id INT NOT NULL,
                           PRIMARY KEY (user_id, offer_id),
                           FOREIGN KEY (user_id) REFERENCES users(id)
                               ON DELETE CASCADE,
                           FOREIGN KEY (offer_id) REFERENCES offers(id)
                               ON DELETE CASCADE);

この Fiddleで実際の例を見ることができます。

于 2013-04-21T01:25:56.000 に答える