Kezdőoldal » Számítástechnika » Programozás » Miért zavar be a trigger...

Ozmium42 kérdése:

Miért zavar be a trigger (SQLite)?

Figyelt kérdés

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?


2019. júl. 25. 21:25
 1/3 anonim ***** válasza:
100%

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.

2019. júl. 25. 21:49
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:
100%

"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.

2019. júl. 25. 22:29
Hasznos számodra ez a válasz?
 3/3 A kérdező kommentje:
Azért bátorkodtam triggert írni, mert még nem írtam sosem, és valahogy meg kell tanulni. Az lett volna a lényeg, hogy a "sorszám" oszlop folytonos legyen, vagyis ha n sor van, akkor 1-től n-ig legyen sorszámozva, azután is, hogy kitörlök sorokat. Azt viszont nem értem továbbra sem, mi okozza a kiszámíthatatlan működést. Úgy tűnik, mintha ez az alapértelmezett rowid oszlop (nem része a tábla deklarációnak, automatikusan kerül hozzá) fontosabb szerepet játszana a háttérben, mint ahogy látszik.
2019. júl. 25. 22:30

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!