sql >> Base de Datos >  >> RDS >> Mysql

¿Eliminar automáticamente los datos de unión junto con ELIMINAR de un registro?

Declarar una acción referencial:ON DELETE CASCADE, por ejemplo:

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 la acción referencial en la sintaxis de clave externa "taquigráfica" no funciona (confirmado en MySQL 5.5.30, 5.6.6 m9). Lo siguiente se analiza, pero cuando user se elimina, el user_offer correspondiente no se elimina:

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