MySQL ON DELETE CASCADE

Rezumat: în acest tutorial, veți învăța cum să utilizați acțiunea referențială MySQL ON DELETE CASCADE pentru o cheie externă pentru a șterge date din mai multe tabele înrudite.

În tutorialul anterior, ați învățat cum să ștergeți date din mai multe tabele înrudite folosind o singură instrucțiune DELETE. Cu toate acestea, MySQL oferă o modalitate mai eficientă numită ON DELETE CASCADE acțiune referențială ON DELETE CASCADE pentru o cheie străină care vă permite să ștergeți datele din tabelele copil în mod automat atunci când ștergeți datele din tabelul părinte.

MySQL ON DELETE CASCADE exemplu

Să aruncăm o privire la un exemplu de utilizare a MySQL ON DELETE CASCADE .

Să presupunem că avem două tabele:buildings și rooms . În acest model de bază de date, fiecare clădire are una sau mai multe camere. Cu toate acestea, fiecare cameră aparține unei singure clădiri. O cameră nu ar exista fără o clădire.

Relația dintre tabelele buildings și rooms este de tip unu-la-mulțime (1:N), așa cum este ilustrat în următoarea diagramă a bazei de date:

Când ștergeți un rând din tabelul buildings, doriți, de asemenea, să ștergeți toate rândurile din tabelul rooms care fac referire la rândul din tabelul buildings. De exemplu, atunci când ștergeți un rând cu clădirea nr. 2 din tabelul buildings ca următoarea interogare:

Code language: SQL (Structured Query Language) (sql)

Doriți, de asemenea, ca rândurile din tabelul rooms care se referă la clădirea nr. 2 să fie, de asemenea, eliminate.

Cele ce urmează sunt pașii care demonstrează modul în care funcționează acțiunea referențială ON DELETE CASCADE.

Pasul 1. Creați tabelul buildings:

Code language: SQL (Structured Query Language) (sql)

Etapa 2. Creați tabela rooms:

Code language: SQL (Structured Query Language) (sql)

Observați că clauza ON DELETE CASCADE de la sfârșitul definiției constrângerii de cheie străină.

Etapa 3. Introduceți rânduri în tabelul buildings:

Code language: SQL (Structured Query Language) (sql)

Etapa 4. Consultați datele din tabelul buildings:

Code language: SQL (Structured Query Language) (sql)

Avem două rânduri în tabelul buildings.

Etapa 5. Inserăm rânduri în tabelul rooms:

Code language: SQL (Structured Query Language) (sql)

Etapa 6. Interogăm datele din tabelul rooms:

Code language: SQL (Structured Query Language) (sql)

Avem trei camere care aparțin clădirii nr. 1 și două camere care aparțin clădirii nr. 2.

Etapa 7. Se șterge clădirea cu clădirea nr. 2:

Code language: SQL (Structured Query Language) (sql)

Etapa 8. Se interoghează datele din tabelul rooms:

Code language: SQL (Structured Query Language) (sql)

După cum se poate observa, toate rândurile care fac referire la building_no 2 au fost șterse automat.

Rețineți că ON DELETE CASCADE funcționează numai cu tabele cu motoare de stocare care suportă chei străine de ex, InnoDB.

Câteva tipuri de tabele nu acceptă chei străine, cum ar fi MyISAM, astfel încât ar trebui să alegeți motoare de stocare adecvate pentru tabelele pentru care intenționați să utilizați acțiunea referențială MySQL ON DELETE CASCADE.

Consiliere pentru a găsi tabelele afectate de acțiunea MySQL ON DELETE CASCADE

Câteodată, este util să știți ce tabel este afectat de acțiunea referențială ON DELETE CASCADE atunci când ștergeți date dintr-un tabel. Puteți interoga aceste date din referential_constraints în baza de date information_schema după cum urmează:

Code language: SQL (Structured Query Language) (sql)

De exemplu, pentru a găsi tabelele care sunt asociate tabelului buildings cu regula de ștergere CASCADE în baza de date classicmodels, se utilizează următoarea interogare:

Code language: SQL (Structured Query Language) (sql)

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.