MySQL ON DELETE CASCADE

Yhteenveto: Tässä opetusohjelmassa opit käyttämään MySQL:n ON DELETE CASCADE-viittaustoimintoa vierasta avainta varten tietojen poistamiseksi useista toisiinsa liittyvistä taulukoista.

Edellisessä opetusohjelmassa opit poistamaan tietoja useista toisiinsa liittyvistä taulukoista yhdellä DELETE-lausekkeella. MySQL tarjoaa kuitenkin tehokkaamman tavan nimeltä ON DELETE CASCADE referential action for a foreign key, jonka avulla voit poistaa tietoja lapsitaulukoista automaattisesti, kun poistat tietoja emotaulukosta.

MySQL ON DELETE CASCADE -esimerkki

Katsotaanpa esimerkki MySQL:n ON DELETE CASCADE:n käyttämisestä.

Esitellään, että meillä on kaksi taulukkoa:buildings ja rooms . Tässä tietokantamallissa kussakin rakennuksessa on yksi tai monta huonetta. Jokainen huone kuuluu kuitenkin vain yhteen rakennukseen. Huonetta ei olisi olemassa ilman rakennusta.

Taulujen buildings ja rooms välinen suhde on yksi monesta (1:N), kuten seuraavassa tietokantakaaviossa on esitetty:

Kun poistat rivin buildings-taulusta, haluat poistaa myös kaikki rooms-taulun rivit, jotka viittaavat kyseiseen riviin buildings-taulussa. Kun esimerkiksi poistat rivin, jonka rakennuksen nro. 2 buildings-taulussa seuraavalla kyselyllä:

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

Tahdot, että myös rooms-taulussa olevat rivit, jotka viittaavat rakennukseen nro 2, poistetaan.

Seuraavat vaiheet havainnollistavat, miten ON DELETE CASCADE-viittaustoiminto toimii.

Vaihe 1. Valitse

. Luo buildings-taulu:

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

Vaihe 2. Luo rooms-taulukko:

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

Huomaa, että ON DELETE CASCADE-lauseke on vieraan avaimen rajoitusmäärittelyn lopussa.

Vaihe 3. Lisää rivejä buildings-tauluun:

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

Vaihe 4. Haetaan tietoja buildings-taulusta:

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

Meillä on kaksi riviä buildings-taulussa.

Vaihe 5. Lisää rivit rooms-taulukkoon:

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

Vaihe 6. Haetaan tietoja rooms-taulusta:

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

Meillä on kolme huonetta, jotka kuuluvat rakennukseen nro 1, ja kaksi huonetta, jotka kuuluvat rakennukseen nro 2.

Vaihe 7. Poistetaan rakennus, jossa on rakennus nro. 2:

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

Vaihe 8. Kysy tietoja rooms-taulusta:

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

Kuten näet, kaikki rivit, jotka viittaavat building_no 2:een, poistettiin automaattisesti.

Huomaa, että ON DELETE CASCADE toimii vain taulukoissa, joiden tallennusmoottorit tukevat vierasavaimia, esim, InnoDB.

Jotkut taulutyypit eivät tue vierasavaimia, kuten MyISAM, joten sinun on valittava sopivat tallennusmoottorit niille taulukoille, joihin aiot käyttää MySQL:n ON DELETE CASCADE-viittaustoimintoa.

Vihjeitä, joiden avulla voit löytää taulukot, joihin MySQL:n ON DELETE CASCADE -toiminto vaikuttaa

Joskus on hyödyllistä tietää, mihin taulukkoon viittaustoiminto ON DELETE CASCADE vaikuttaa, kun poistat dataa taulukosta. Voit kysyä näitä tietoja referential_constraints:stä information_schema-tietokannassa seuraavasti:

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

Esimerkiksi löytääksesi taulut, jotka liittyvät buildings-tauluun, johon liittyy CASCADE-poistosääntö classicmodels-tietokannassa, voit käyttää seuraavaa kyselyä:

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

Vastaa

Sähköpostiosoitettasi ei julkaista.