Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Automatycznie usuwać dane skrzyżowania wraz z DELETE rekordu?

Zadeklaruj akcję referencyjną:PRZY USUWANIU KASKADY, na przykład:

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]

Co ciekawe, wydaje się, że określenie akcji referencyjnej w „skróconej” składni klucza obcego nie działa (potwierdzone w MySQL 5.5.30, 5.6.6 m9). Poniższe jest analizowane, ale gdy user zostanie usunięty, odpowiednia user_offer nie zostanie usunięty:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problemy ze składnią zapytania mysql Node.js UPDATE WHERE

  2. czy mogę ufać, że mysql_insert_id() zwróci poprawną wartość, wielowątkowa paranoja?

  3. schemat bazy danych dla atrybutów produktów

  4. Wyjaśnij MySQL wyjaśnij matematykę planu wykonania, różnica między dwoma planami

  5. Podział SQL używający 'nie istnieje' w mysql