sql >> データベース >  >> RDS >> Mysql

レコードのDELETEとともにジャンクションデータを自動的に削除しますか?

    参照アクションを宣言します: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 Fiddle]

    興味深いことに、「省略形」の外部キー構文で参照アクションを指定することは機能しないようです(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)
    );
    


    1. すべてのテーブルを一度に修復する

    2. sqlachemyのhave句でラベルを使用する

    3. MySQL:ORDER BY RAND()の代替

    4. PostgreSQL11-手順