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)

.




