MySQL ON DELETE CASCADE

Összefoglaló: Ebben a bemutatóban megtanulja, hogyan használhatja a MySQL ON DELETE CASCADE referenciális műveletét egy idegen kulcsra, hogy adatokat töröljön több kapcsolódó táblából.

Az előző bemutatóban megtanulta, hogyan törölhet adatokat több kapcsolódó táblából egyetlen DELETE utasítással. A MySQL azonban egy hatékonyabb módszert biztosít, az úgynevezett ON DELETE CASCADE referenciális művelet idegen kulcsra, amely lehetővé teszi, hogy automatikusan törölje az adatokat a gyermek táblákból, amikor törli az adatokat a szülő táblából.

MySQL ON DELETE CASCADE példa

Nézzünk egy példát a MySQL ON DELETE CASCADE használatára.

Tegyük fel, hogy van két táblánk:buildings és rooms . Ebben az adatbázis-modellben minden épületnek egy vagy több szobája van. Azonban minden szoba csak egy épülethez tartozik. Egy szoba nem létezne épület nélkül.

A buildings és a rooms táblák közötti kapcsolat egy a sokhoz (1:N), amint azt az alábbi adatbázis-diagram szemlélteti:

Amikor törölünk egy sort a buildings táblából, a rooms táblában is törölni akarjuk az összes olyan sort, amely a buildings tábla sorára hivatkozik. Például, amikor töröl egy olyan sort, amelynek építési száma. 2-es számú sort a buildings táblában a következő lekérdezés szerint:

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

Az rooms táblában lévő, a 2-es számú épületre hivatkozó sorokat is el akarja távolítani.

A következőkben a ON DELETE CASCADE hivatkozási művelet működését bemutató lépések következnek.

1. lépés. Hozzuk létre a buildings táblát:

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

2. lépés. Hozzuk létre a rooms táblát:

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

Figyeljünk arra, hogy a ON DELETE CASCADE záradék az idegenkulcs-kényszer definíciójának végén található.

3. lépés. Szúrjon be sorokat a buildings táblába:

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

4. lépés. Adatok lekérdezése a buildings táblából:

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

Két sorunk van a buildings táblában.

5. lépés. Szúrjunk be sorokat a rooms táblába:

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

6. lépés. Adatok lekérdezése a rooms táblából:

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

Három szoba tartozik az 1. számú épülethez és két szoba a 2. számú épülethez.

7. lépés. Töröljük az épületet az épület sz. 2. számú épületet:

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

8. lépés. Adatlekérdezés a rooms táblából:

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

Mint látható, a building_no 2. számú épületre hivatkozó összes sor automatikusan törlődött.

Megjegyezzük, hogy a ON DELETE CASCADE csak olyan táblákkal működik, amelyeknél a tárolómotorok támogatják az idegen kulcsokat, pl., InnoDB.

Egyes táblatípusok nem támogatják az idegen kulcsokat, mint például a MyISAM, ezért megfelelő tárolómotorokat kell választania a MySQL ON DELETE CASCADE referenciális műveletet használni szándékozó táblákhoz.

Tippek a MySQL ON DELETE CASCADE művelet által érintett táblák megtalálásához

Néha hasznos lehet tudni, hogy egy tábla adatainak törlésénél melyik táblát érinti a ON DELETE CASCADE referenciális művelet. Ezeket az adatokat a referential_constraints adatbázisból a information_schema adatbázisban a következőképpen kérdezheti le:

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

Ezért például a classicmodels adatbázisban a CASCADE törlési szabállyal a buildings táblához kapcsolódó táblák megkereséséhez a következő lekérdezést használja:

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

.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.