Miért zavar be a trigger (SQLite)?
Van két tábla, az egyikben integer primary key, a másikban foreign key reference az előbbire, és ON DELETE CASCADE
Ezen kívül két trigger a két táblára, ami az alapértelmezett rowid oszlopban átírja eggyel kisebbre a törölt sornál magasabb rowid-ket.
Azt vettem észre, hogy ez a két trigger igencsak bezavar, például nem lehet törölni semmit az első táblából (constraint error), vagy a másik táblából csak egyenként lehet törölni, egyébként például ha az összes sort akarom törölni, megmarad a fele... és ha a triggereket törlöm, akkor működik minden tervszerűen.
Mi a magyarázat erre?
1. Eleve teljesen elvetélt ötlet id-kat utólag manipulálgatni. Azért id, mert állandó, sosem változik, egyértelműen azonosít. Örökre felejtsd el az ötlet csíráját is.
2. A triggerek "gonoszak", hatalmas performancia probélámat okozhatnak, ha megnő az adatbázis. Csak akkor használd, ha nagyon tudod, hogy mit csinálsz és biztosan nincs más megoldás.
3. Olyan trigger, ami egy rakás sort manipulál (akár egy teljes tábla tartalmát is) konkrétan performanciai öngyilkosság.
"Ezen kívül két trigger a két táblára, ami az alapértelmezett rowid oszlopban átírja eggyel kisebbre a törölt sornál magasabb rowid-ket."
Azért kapsz constraint error-t, mert a trigger átírja a rowid-t, és lesz egy olyan állapot, amikor marad egy fk-d egy olyan értékre mutatva, amit az előbb írtál át. Sérül a hivatkozási integritás.
A másik fele elég zavaros számomra, és a pontos query-ből lehetne csak pontos választ adni. De van egy sejtésem: az sqlite törli a 0. sort, a trigger az 1. sort 0-ra rakja, majd az sqlite törli az 1. sort (és a 0 beragad). Ez tényleg csak egy nagyon távoli tipp, szóval teszteld. Ha minden második marad meg, akkor igazam volt.
Igaza van az előttem szólónak. Nagyon, nagyon kevés olyan helyzet van, amikor valamit csak triggerrel lehet megoldani. Olyan meg szinte soha nincs, hogy pk módosul.
Kapcsolódó 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!