Mysql
 sql >> Base de données >  >> RDS >> Mysql

Supprimer automatiquement les données de jonction avec la suppression d'un enregistrement ?

Déclarez une action référentielle :ON DELETE CASCADE, par exemple :

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]

Chose intéressante, il semble que la spécification d'une action référentielle dans la syntaxe de clé étrangère "abrégée" ne fonctionne pas (confirmé sous MySQL 5.5.30, 5.6.6 m9). Ce qui suit est analysé, mais lorsque user est supprimé, l'user_offer correspondant n'est pas supprimé :

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