Mi történik az SQLite-ban ilyenkor?
Van a Table1.id, ami INTEGER PRIMARY KEY
Van a Table2.id REFERENCES Table1(id)
1. Ha törlök egy id-t a Table1-ből, akkor a hozzá tartozó Table2 rekordok vele együtt törlődnek, vagy hibaüzenet lesz, hogy nem törölhetem?
2. Abban az esetben, ha:
Table2.id REFERENCES Table1(id) ON DELETE CASCADE
a megfeleltetés kikényszerítése (nem lehet létrehozni olyan Table2.id-t, ami nem szerepel a Table1.id-ként) ebben az esetben is ugyanúgy él, mint az első esetben, vagy ilyenkor csak a törlésnél ellenőrzi, hogy van-e megfelelő rekord a Table2-ben?
Az ON DELETE CASCADE általában (kb. minden SQL-nél) azt jelenti, hogy ha kitörlöd a Tabla1-ből a rekordot minden olyan olyan Tabla2-bel rekord törlődik vele együtt ami ezt a kulcsot használja.
Ha nincs kiírva akkor megadják mi az alapértelmezett, ha nincs kiírva az ON DELETE CASCADE vagy az ON DELETE RESTRICT
Az ON DELETE RESTRICT azt jelenti, hogy nem törölheted Tabla1-ből ameddig van olyan rekord a Tabla2-ben ami ezt használja.
Neekem úgy tanították, hogy inkább írjuk ki, hogy mit szeretnénk ne bizzuk az "alapértelmezésre", mert akkor biztosan portábilis lesz a táblaszerkezet.
1.) Nem törlődik, mert az alapértelmezett a "NO ACTION":
2.) Igen él, hiszen a "Table2.id REFERENCES Table1(id)"-val azt mondod, hogy Table2.id egy Table1.id érték.
Az "ON DELETE CASCADE" azt mondja meg, hogy ha megszűnik az a Table1.id, amire hivatkozik a Table2.id, akkor mi történjen azzal a rekorddal. Jelen esetben törlődjön. Figyelem! Ez fordítva nem igaz.
További kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!