Mysql
 sql >> Database >  >> RDS >> Mysql

Eliminare automaticamente i dati di giunzione insieme a DELETE di un record?

Dichiarare un'azione referenziale:ON DELETE CASCADE, ad esempio:

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]

È interessante notare che sembra che la specifica dell'azione referenziale nella sintassi della chiave esterna "abbreviata" non funzioni (confermato in MySQL 5.5.30, 5.6.6 m9). Quanto segue viene analizzato, ma quando user viene cancellato, il corrispondente user_offer non viene eliminato:

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)
);