A törléssel és frissítéssel kapcsolatos műveletek - a külföldi kulcsok speciális funkciói - a külföldi kulcsok támogatása

4.3. ON TÖRLÉS és ON UPDATE műveletek

Kifejezések a Törlés az UPDATE és idegen kulcsok kerülnek felhasználásra adja végrehajtandó műveletek törlésekor a szülő tábla sorokat (ON DELETE), vagy megváltoztatja a szülő gomb (ON UPDATE). Ugyanaz az idegen kulcs különböző műveleteket adhat meg az ON DELETE és ON UPDATE beállításokhoz. A külföldi kulcsok fellépése sokféle módon indítja el a triggereket.







Az SQLite adatbázis akció a Törlés és az ON UPDATE társított adatokat egy idegen kulcs a következők lehetnek: NO ACTION KORLÁTOZZÁK SET NULL, ALAPBEÁLLÍTÁS vagy CASCADE. Ha az akció nincs kifejezetten megadva, az az alapértelmezett NO ACTION.

  • NINCS ACTION. a "NINCS ACTION" opció azt jelenti, hogy ha a szülői kulcsot megváltoztatják vagy törlik az adatbázisból, akkor nem történik különleges művelet.
  • RESTRICT. akció «RESTRICT» abban a tényben rejlik, hogy a kérelem nem veheti át (ON DELETE korlátozni), vagy változás (ON UPDATE korlátozni) a szülő gombot, ha van egy vagy több lehet rá hivatkozni leányvállalatok kulcsokat. A különbség a hatását RESTRICT cselekvés és a szokásos viselkedését a külföldi kulcs korlátozó intézkedés akkor kezdődik, amikor változik a felvételi területen, és nem akkor, amikor befejezte az aktuális kérés, mint abban az esetben azonnali korlátozásokat, és nem akkor, amikor a végek az aktuális tranzakció mint a halasztott korlátozás esetében. Még ha az idegen kulcs be, mint halasztható el, ha a keresetét nyilvánították RESTRICT, SQLite generál hibaüzenetet azonnal, ha már eltávolították, vagy megváltozott a szülő kulcs, amely meghatározza a gyermek kulcsokat.
  • SET NULL. Ha a kereset kialakítva «SET NULL», akkor, amikor eltávolítja a szülő gomb (ON DELETE SET NULL), illetve annak változása (ON UPDATE SET NULL) gyermek kulcs oszlopok ennek az értéke NULL az összes sorban a gyermek asztal, amely hivatkozik az eltávolítható / változó sor a szülő táblázatban.
  • SET DEFAULT. a SET DEFAULT művelet hasonló a SET NULL-hoz, kivéve, hogy a gyermekkulcs egyes oszlopainak értéke nem NULL értékre van állítva, hanem az adott oszlop alapértelmezett értékére. Az oszlopok hozzárendeléséhez szükséges alapértelmezett értékekről a CREATE TABLE részletes dokumentációja olvasható.
  • CASCADE. a "CASCADE" művelet kiterjeszti a szülői kulcs törlésére és megváltoztatására irányuló műveleteit eltartott gyermekei számára. Az ON DELETE CASCADE műveletére ez azt jelenti, hogy a gyermektáblázat minden sorát, amely a törölni kívánt szülő sorhoz tartozik, szintén törlődik. Az ON UPDATE CASCADE művelet esetében ez abban a tényt fejezi ki, hogy az eltartott gyermek kulcsában tárolt értékek helyettesítik a szülő kulcs új értékeit.






Például adja hozzá az "ON UPDATE CASCADE" kifejezést az alábbiak szerint. Ez egy jobb séma az 1. fejezet példájából, amely lehetővé teszi a felhasználó számára az "artistid" oszlop (az idegen kulcs szülő kulcsának) módosítását a referenciális integritás megsértése nélkül:

Az UPDATE vagy az ON TÖRLÉS műveletek beállítása nem jelenti azt, hogy ez az idegen kulcskorlátozás nem szükséges.

Ha például egy akció ON DELETE SET DEFAULT, de hiányzik az a szülő tábla sor megfelelő alapértelmezett leányának kulcs oszlop, megszűnik a szülő kulcs alkalmazásával, amelynek vannak eltartott gyermek kulcsok vezet megsértését idegen kulcs. Például:

Hasonlóan azokhoz az SQLite műveletekhez, amelyek ON DELETE SET DEFAULT jelöléssel vannak jelölve és a fenti példában bemutatottak, a következő "TÖRLÉS TÖRLÉSE" működése működik:

Ha az idegen kulcskal rendelkező szülői táblázat sorszáma törlődik, vagy ha a szülő kulcs oszlopokban tárolt értékek megváltoztak, a következő logikai eseménysorozatok fordulnak elő:

  1. A BEFORE indítóprogram fut.
  2. Helyi korlátozások (nem idegen kulcs) ellenőrzése.
  3. A szülõtábla sorát frissítjük vagy töröljük.
  4. Az idegen kulcs által megkövetelt egyéb műveletek végrehajtására kerül sor.
  5. Az AFTER trigger program fut.

Van egy jelentős különbség az idegen kulcs és az SQL triggerek ON UPDATE művelete között. Az ON UPDATE művelet csak akkor kerül végrehajtásra, ha a szülői kulcs értékeit úgy módosítja, hogy a szülő kulcs új értékei nem egyenértékűek a régebbi értékekkel. Például: