Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Excluir dados de junção automaticamente junto com DELETE de um registro?


Declare uma ação referencial:ON DELETE CASCADE, por exemplo:
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]

Curiosamente, parece que especificar a ação referencial na sintaxe de chave estrangeira "abreviada" não funciona (confirmado no MySQL 5.5.30, 5.6.6 m9). O seguinte é analisado, mas quando user for excluído, a user_offer correspondente não é deletado:
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)
);