Kiváltja létrehozását és alkalmazását
Meghatározása a ravaszt az SQL szabvány
A triggerek olyan típusú tárolt eljárásokat. A végrehajtás történik, ha a táblázat bármely adatkezelési nyelvet (DML). Kiváltó okok igazolására használt adatok integritását és visszaszorítása tranzakciót.
Trigger - egy lefordított SQL-eljárás, amelyek teljesítése annak köszönhető, hogy a kezdeti bizonyos események egy relációs adatbázis. Használata flip-flop a legtöbb nagyon kényelmes a felhasználók számára az adatbázis. Azonban ezek alkalmazása gyakran jár többletköltségeket források I / O műveleteket. Abban az esetben, ha ugyanazt az eredményt (jóval alacsonyabb rezsi költségű forrásokkal) állíthatók elő a tárolt eljárást vagy alkalmazást használó kiváltja megfelelő.
Kiváltó - egy speciális eszköz SQL-szerver fenntartásához felhasznált adatok integritását az adatbázisban. Az integritási kényszerek, szabályok és alapértelmezett értékek nem mindig lehetséges, hogy elérjék a kívánt szintre emelhető. Gyakran kell hajtania komplex algoritmusok az adatok érvényesítését, hogy biztosítsák a hitelesség és a valóság. Ezenkívül néha szükség van a változások nyomon követése a keresési táblázat megváltoztatni kívánt kapcsolódó adatot. Váltja be lehet tekinteni, mint egyfajta szűrő, belépő művelet elvégzése után minden műveletet szabályokkal összhangban, az alapértelmezett értékek, stb
A trigger egy speciális típusa a tárolt eljárás, fut a szerver automatikusan megpróbálja módosítani az adatokat táblázatokban, amellyel kiváltó kapcsolódik. Minden flip-flop van kötve egy adott táblán. Minden módosítás a rajtuk adatokat kezelnek egyetlen tranzakciót. Hiba esetén vagy az adatok korrupció történik rollback a tranzakciót. Változások tehát tilos. Törölt és minden változtatás által már a ravaszt.
Ez létrehoz egy ravaszt csak az adatbázis tulajdonosa. Ez a korlátozás megakadályozza a véletlen változások a táblázatok struktúrája, módon kommunikálni velük, és egyéb tárgyak, stb
A ravaszt egy nagyon hasznos, és ugyanakkor egy veszélyes eszköz. Tehát, ha nem a logika munkája könnyen elpusztítani egy egész adatbázist, így a kiváltó kell nagyon óvatosan hibakeresése.
Ezzel szemben a szokásos rutin ravaszt lefut hallgatólagosan minden esetben az esemény a kiváltó esemény. Sőt, azt sem érveket. Hozva azt a hatást néha a dob ravaszt. A rendszer segítségével a következő célok elérését kiváltó:
- ellenőrzi a vállalkozás adatait és a bonyolult adatok integritási kényszerek, amelyek nehéz, ha nem lehetetlen, integritásának fenntartása révén korlátozásokat az asztalra;
- figyelmeztetéseket, emlékeztetve, hogy szükség van, hogy bizonyos műveleteket, amikor frissíti asztal, végre egy bizonyos módon;
- a felhalmozási ellenőrzési adatok rögzítésével a részleteket a változásokat és a személyek, akik őket;
- replikáció támogatást.
CREATE kiválthatja a alapformátuma a parancs az alábbiak szerint:
Trigger események állnak inszerciójával, deléciójával és frissítése a táblázat sorai a. Az utóbbi esetben a kiváltó esemény megadhatja a konkrét nevek a táblázat oszlopait. Start trigger idő határozza meg egy kulcsszót ELŐTT (ravaszt fut, mielőtt az ezzel összefüggő események) vagy után (végrehajtás után).
Elvégzett lépésekben meghatározott flip-flop minden sorban (mindegyik sor) hatálya alá tartozó, az esemény, vagy csak egyszer minden esemény (minden egyes állítással).
kijelölés <список_старых_или_новых_псевдонимов> Arra utal, hogy alkatrészek, mint a régi vagy új sor (régi / új) vagy a régi vagy új tábla (OLD TÁBLÁZAT / új tábla). Egyértelmű, hogy a régi értékek nem vonatkoznak beszúrni események és új -, hogy távolítsa eseményeket.
Ha megfelelő módon használják kiváltja lehet egy nagyon erős mechanizmust. A fő előnye, hogy szabványos funkciók vannak tárolva az adatbázisban, és következetesen aktiválta minden alkalommal frissül. Ez nagyban egyszerűsíti az alkalmazást. Mindazonáltal meg kell említeni a rejlő hibákat a ravaszt:
- komplexitás: mozgatásakor bizonyos funkciók az adatbázisba feladatát nehezíti a tervezés, a végrehajtás és adminisztráció;
- rejtett funkciók: a transzfer a funkciók az adatbázisban, és tárolja őket formájában egy vagy több kiváltó, esetenként azt eredményezi, hogy elrejtse a felhasználó néhány funkciót. Bár ez bizonyos mértékig megkönnyíti a munkát, de sajnos, ez is okozhat a nem tervezett, nem kívánt és potenciálisan káros mellékhatásai, mivel ebben az esetben a felhasználó nem tudja ellenőrizni a folyamatok játszódnak le az adatbázisba;
- hatással van a teljesítményre: Mielőtt minden paranccsal módosíthatja az adatbázis állami adatbázis ellenőriznie kell a kiváltó feltétel tisztázása érdekében van szükség, hogy futtassa a ravaszt a csapatnak. Művészet ilyen számítások befolyásolja a teljesítményét az adatbázisban, de pillanatok alatt a csúcsterhelés csökkentése válhat különösen feltűnő. Egyértelmű, hogy a növekvő számú kiváltó és a megnövelt fej feletti ilyen műveletekkel járó.
Elgépelt kiváltó vezethet súlyos problémák, mint például a megjelenését a „halott” zárak. A triggerek elzárhatják sokáig sok erőforrást, így különös figyelmet kell fordítaniuk, hogy minimalizálják a hozzáférési konfliktusokat.
Végrehajtása vezérlőhöz a SQL Server környezetben, a MS
Végrehajtásának MS SQL Server adatbázis-kezelő rendszert használ, a következő nyilatkozatot létrehozásához vagy módosításához a ravaszt:
A trigger lehet létrehozni csak az aktuális adatbázisban, de a fellebbezés megengedett a ravaszt, hogy más adatbázisok, beleértve azokat is, található egy távoli szerveren.
Tekintsük kinevezését érveket a CREATE parancs | ALTER ravaszt.
kiváltó névnek egyedinek kell lennie az adatbázisban. Ezen felül, akkor adja meg a nevét a tulajdonos.
típusú kiváltó
Az SQL Server, van két paraméter, amely meghatározza a viselkedését kiváltó:
Eseményindítók szerint osztályozzák, hogy milyen típusú parancs, amelyre válaszolni.
Háromféle trigger:
- INSERT TRIGGER - futás, amikor megpróbál beilleszteni adatokat az INSERT paranccsal.
- UPDATE TRIGGER - futni, amikor megpróbál változtatni adatokat az UPDATE parancsot.
- Törli az aktiválási - futni, amikor megpróbál adatokat törölni a DELETE paranccsal.
Tervezés [TÖRLÉS] [,] [INSERT] [,] [UPDATE], illetve | UTÁN | HELYETT><[INSERT] [,] [UPDATE] определяют, на какую команду будет реагировать триггер. При его создании должна быть указана хотя бы одна команда. Допускается создание триггера. реагирующего на две или на все три команды.
Érv APPEND lehetővé teszi, hogy több kiváltó minden típusból.
Amikor létrehoz egy ravaszt érv NEM REPLICATION megtiltja, hogy fut módosítása során táblázatok replikációs mechanizmusa.
Design sql_operator [. n] határoz meg az üzemeltetők és SQL- parancsokat hajtja végre, mikor a ravaszt elindul.
Megjegyezzük, hogy a flip-flop nem engedélyezett számos műveletet végez, mint például:
- létrehozására, módosítására és törlésére adatbázisokba;
- Visszaállítása biztonsági másolatot az adatbázisról vagy tranzakciós napló.
Ezek a parancsok nem megengedett, mert nem lehet törölni esetén rollback, azaz a ravaszt. Ez a tiltás nem valószínű, hogy valahogy befolyásolja a funkciót, hogy hozzon létre a ravaszt. Nehéz megtalálni a helyzet, amikor például megváltoztatása után a vonal a tábla helyreállításához szükséges a tranzakciós napló.
kiváltó programozás
Ha a hozzáadott parancsokat, a változás, és törölni rekordokat, a szerver két különleges asztalok: egészül ki, és hagyni. Ezek felsorolását tartalmazzák húrok lesz beszúrva, vagy eltávolítani a következtetést a tranzakciót. Szerkezet egészül ki, és hagyni táblázatok azonos a táblázatok szerkezete, amelyekre a ravaszt meghatározzuk. Minden ravaszt megteremti saját táblacsoportban egészül ki, és hagyni. Ezért nincs más ravaszt nem lesz képes elérni azokat. Attól függően, hogy a művelet típusát, ami miatt a végrehajtás ravaszt. tartalmát a egészül ki, és hagyni táblázatok különböző lehet:
- INSERT parancs - ki a táblázat tartalmazza az összes húrok, hogy a felhasználó megpróbálja beilleszteni egy táblázatot; A táblázatban nem törlődnek audio vonal; után a reteszt az összes sort táblázatok ki a lépés forrás tábla;
- törlése parancsát - törölt a táblázatban tartalmazni fogja az összes sort, hogy a felhasználó megpróbálja törölni; ravaszt ellenőrizni minden sor, és meghatározza, hogy annak eltávolítása nem engedélyezett; A táblázatban nem egészül audio vonal;
- UPDATE parancs - amikor végre az asztalnál kell hagyni a régi értékeket sorok törlődnek a sikeres befejezése után a ravaszt. Az új értékek a sorok szereplő táblázat beszúrva. Ezek a vonalak hozzá kell adni az eredeti tábla után a sikeres végrehajtását a ravaszt.
További információk a sorok számát módosítani kell a sikeres befejezése után a ravaszt. Használhatja a @@ ROWCOUNT funkció; visszatér a sorok számát dolgozza fel az utolsó parancsot. Hangsúlyozni kell, hogy a trigger nem fut, amikor megpróbál módosítani egy adott sorban, és abban a pillanatban a változás parancsot. Az egyik ilyen csapat dolgozik több vonalon, így a ravaszt kell kezelni az összes ezeket a sorokat.
Ha a ravaszt úgy találta, hogy a 100 betét, frissítés, vagy sorokat törölni, csak egy vagy nem teljesíti az egyéb feltételek, akkor nincs ilyen sor nem kerül bele, módosítani vagy törölni. Ez a viselkedés követelményei miatt az ügylet - kell végrehajtani, vagy az összes módosítást, vagy egyik sem.
Trigger fut implicit módon definiált tranzakció, így a retesz használata engedélyezett a tranzakció kezelésére parancsokat. Különösen az észlelési megsértése integritási kényszerek megszakítani a végrehajtását a ravaszt, és vonja vissza a módosításokat, amelyek próbált futni a felhasználónak kell használni a rollback tranzakciót.
A listát az oszlopok során módosított INSERT vagy UPDATE parancsok. okozott a ravaszt, hogy végre. Használhatja COLUMNS_UPDATED () függvényt. Ez visszaad egy bináris szám, minden bit a legalacsonyabb megfelel egy tábla oszlopának (sorrendben az oszlopok, amikor a tábla jön létre). Ha a bit értéke „1”, a megfelelő oszlop megváltozott. Ezen túlmenően, az a tény, a változó egy oszlop meghatározza a funkciót UPDATE (oszlop_neve).
Ha törölni a ravaszt, használd a
Példák a használata kiváltó.
Példa 14.1. Egy ravasz végrehajtására vonatkozó korlátozásokat az értéket. A hozzáadott tábla tranzakciós rekordokat száma az eladott áru nem lehet kevesebb, mint a maradék táblázat Anyag.
behelyezése Command Tranzakciós táblázat bejegyzéseket lehet, például, a következők szerint:
Kivált ravaszt kell reagálni annak végrehajtása az alábbiak szerint: meg kell szakítani a parancsot, ha az érték a táblázatban Warehouse áru maradékot kisebb mennyiségű eladott áruk a beírt kód (Példa Termék kód = 3). A beillesztett rekord az áruk mennyiségét jelzi a „+” jel, ha az áruk szállítása, és a „-” jel, ha eladják. Bemutatta a ravaszt kialakítva, hogy feldolgozza csak egy bejegyzés alatt hozzá.
Példa 14.1. Egy ravasz végrehajtására vonatkozó korlátozásokat az értéket.
14.2 példa. Használja ravaszt statisztikai adatok gyűjtésére.
Hozzon létre egy aktiválási a felvétel feldolgozási művelet a betét ügylet asztalra. például a következő parancsot:
szállított áruk 3-as kód a kliens kódot összege 1 200 egységet.
Amikor az eladás vagy az áru átvételekor kell beállítani az összeg az állományok. Ha az állomány viszont még mindig ott van, meg kell adnia egy bejegyzést az asztalra Warehouse. Trigger kezelni csak egy húr hozzáadásával.
14.2 példa. Használja ravaszt statisztikai adatok gyűjtésére.
Példa 14.3. Hozzon létre egy kiváltója a feldolgozási művelet a bejegyzés törlésével asztal tranzakciót. például a következő parancsot:
Áruk esetében, akiknek kód bevitele ha töröl egy rekordot, akkor be kell állítani annak egyensúlyát raktáron. Trigger folyamatok csak egy kivehető felvételt.
Példa 14.3. Trigger feldolgozási műveletek törlése a bejegyzést a táblázatban
Példa 14.4. Hozzon létre egy ravaszt megváltoztatni a felvételi feldolgozási művelet a tranzakció asztalra. például a következő parancsot:
minden ügylet az áru kódjelű egyenlő 3, mennyiségének csökkentése, a 10 egység.
A parancs lehet változtatni a több bejegyzés a tranzakció asztalra. Ezért megmutatjuk, hogyan lehet létrehozni egy ravaszt. feldolgozás több mint egy bejegyzést. Az egyes módosított rekord szükséges egy régi (mielőtt a változás) Termék kód csökkentése pont maradék állomány értéke a régi (előző változhat) cikkszám és egy új (a változás után) a termék kódja nagyobb maradék állomány értéke az új (a változás után) értéket. (A beillesztett táblázatot) a folyamat minden megváltozott bejegyzések, be kurzorok, amelyek folyamatosan az összes régi (törölték a táblázatot), és az összes új értékeket.
Példa 14.4. kiváltó változtatni feldolgozási művelet a táblázat bejegyzés
A fenti kiváltó nem lehet összehasonlítani az összeg az árut, ha változnak a rekord a tranzakció maradékát raktáron.
Példa 14.5. E hiány javítása. A generál egy hibaüzenet a szervezetben a ravaszt használat MS SQL Server RAISERROR parancsot. akinek az érvek az üzenetet, súlyossága és hiba állapotot.
Példa 14.5. Felülvizsgált ravaszt változtatni feldolgozási művelet a táblázat bejegyzés
Példa 14.6. Példa 14.5 törli minden megváltozik, amikor lehetetlen végrehajtani legalább az egyiket. Hozzon létre egy ravaszt. Lehetővé teszi, hogy vonja vissza a módosítást csak néhány lemezt, és hajtsa végre a többi változás.
Ebben az esetben a ravaszt nem kerül sor, miután megváltoztatta a feljegyzések, és ahelyett, hogy változik a csapat.
Példa 14.6. Trigger, amely lehetővé teszi, hogy vonja vissza a változások csak néhány lemezt, és hajtsa végre a többi változás.