Autoincrement kulcsmezők végrehajtása
Ha olyan mezőt szeretne létrehozni, amelynek értéke automatikusan növekszik egy, akkor több dolgot kell tennie:
1. Hozzon létre egy generátort a kulcsmezőhöz. A kulcsmezőnek INTEGER típusúnak, NEM NULL-nak és PRIMARY KEY-nak kell lennie. Valójában a generátort bármilyen autoincrement mezőre lehet használni, nem feltétlenül kulcsfontosságú. De leggyakrabban a generátorok használják kulcsfontosságú területeken.
2. Adja meg a 0 értéket a generátorhoz (vagy másképp, ha a tábla átkerül egy másik adatbázisból, és már tartalmaz rekordokat).
3. Hozzon létre egy BEFORE INSERT triggert, amely 1 értékkel növeli ezt az értéket.
Szóval, kezdjük el. Adatbázisunkban Tovar nevű táblázat található, amelyben az azonosító első mezőjét INTEGER NOT NULL-nak nyilvánítják. Sajnos a mezőt nem jelentették kulcsfontosságú PRIMARY KEY-nak. Módosítsa a táblázatot az elsődleges kulcs hozzáadásával a mezőazonosítóhoz:
ALTER TÁBLÁZAT TOVAR ADD PRIMARY KEY (ID);
Most tegye ezt a mezőt autoincremented:
CREATE GENERATOR GenTovar;
/ * A kezdeti érték hozzárendelése a generátorhoz * /
SET GENERATOR GenTovar TO 0;
CREATE TRIGGER TRTOVAR FOR Tovar
AKTÍV ELŐTT AZ INSERT AS
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID (Gen_Tovar, 1); ENDA
/ * A tranzakció befejezése: * / COMMIT;
Az üzemeltetők az e példa szerinti, automatikus növekedése terén érték 1. Tehát behelyezése az első felvétel az értéket 1. A következő bejegyzés lesz 2, és így tovább. Mindez a tranzakció keretében valósul meg, azaz akkor is, ha sok felhasználó módosítja a táblázatot, a generátorok értékei mindig egyediek lesznek. By the way, pontosan azért, mert a táblák változások történnek egy ügyletet, és az alkalmazás kell tanulni az értéke a területen, mielőtt a tranzakció befejeződött, akkor erősen ajánlott, hogy ahelyett, hogy egy egyszerű hozzárendelés:
NEW.ID = GEN_ID (Gen_Tovar, 1);
ezt tegye meg egy NULL-ellenőrzéssel együtt:
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID (Gen_Tovar, 1);
Most meg tudjuk vizsgálni az autoincrement teljesítményét. Hozzon létre egy következő lekérdezést:
INSERT INTO Tovar (Nazvanie, Stoimost) VALUES ("Sugar", 10.50); INSERT INTO Tovar (Nazvanie, Stoimost) VALUES ("Croup", 8,20); SELECT * FROM Tovar;
Ha mindent helyesen csináltál, két rekord jelenik meg a táblázatban, és az azonosító mező automatikusan növekszik: 1:
Ábra. 20.4. Egy autoincrementális mező munkájának bemutatása
Kérjük, vegye figyelembe, hogy csak a Nazvanie és a Stoimost mezőket vettük be. Az azonosító mező értékeit a trigger automatikusan létrehozta. Ne felejtse el lezárni a tranzakciót a COMMIT-vel, mielőtt bezárná az Interaktív SQL ablakot.
A tárolt eljárásoktól eltérően az IBConsole segédprogram kiszolgálófájában nincsenek partíciók az aktiválók számára. Azonban láthatjuk a ravasztunkat. A ravaszt a Tovar tábla számára hozták létre. Válassza ki, kattintson a jobb egérgombbal, és válassza a Tulajdonságok parancsot a helyi menüből. Megnyílik a táblázat tulajdonságai ablak, melyben a Metaadatok lapon kell menni. Ebben az ablakban, miután leírta a táblázat létrehozását, megjelenik a TrTovar triggerünk leírása.
Előadás 21. DML-adatok módosítására vonatkozó parancsok. Scripts.
Az adatmódosítás parancsok a DML (Data Manipulation Language) nyelvre vonatkoznak, amely az SQL nyelv egyik részhalmaza. Az értékek elhelyezhetők egy táblázatban, amelyet a következő üzemeltetők módosíthatnak vagy törölhetnek:
UPDATE (Módosítás) DELETE (Törlés)
Az ügyfélalkalmazásban a táblázat Táblázatelemét használhatjuk, ahol ezeket a műveleteket módszerekkel lehet végrehajtani, de ez nem mindig lehetséges. Például beillesztünk egy új bejegyzést a Hozzáadás módszerrel olyan táblázatban, amelynek automatikus növekményes mezője automatikusan kitöltődik. Ezután megadjuk az összes értéket, kivéve az autoincrement. Ezután, ha megpróbál egy Post módszert végrehajtani, amely menteni a rekordot, akkor valószínűleg hibát kapunk. Ez annak a ténynek köszönhető, hogy a BEFORE INSERT indítás aktiválódik, miután az asztali összetevő végrehajtja a Post módszert. Mivel a kulcsmező nem NULL paraméterrel rendelkezik, az InterBase nem engedi, hogy rekordot helyezzen be egy üres mezőbe. De egy rekord beillesztése INSERT lekérdezéssel egyértelmű. Ezért az adatok szerkesztése leggyakrabban átkerül a lekérdezési összetevőre, amelynek SQL-tulajdonához hozzá van rendelve a lekérdezés. Tehát ismernie kell a módosítási parancsokat, és alkalmaznia kell őket.