Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kreuzungsdaten zusammen mit LÖSCHEN eines Datensatzes automatisch löschen?

Deklarieren Sie eine referenzielle Aktion:ON DELETE CASCADE, zum Beispiel:

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]

Interessanterweise scheint es, dass die Angabe von referenziellen Aktionen in "kurzer" Fremdschlüsselsyntax nicht funktioniert (bestätigt unter MySQL 5.5.30, 5.6.6 m9). Folgendes wird analysiert, aber wenn user gelöscht wird, das entsprechende user_offer wird nicht gelöscht:

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