Declanșează crearea și aplicarea

Determinarea trăgaciului în standardul SQL

Triggers sunt un tip de proceduri stocate. executarea lor se produce atunci când tabela de orice limbaj de manipulare a datelor (LMD). Declanșatoare sunt utilizate pentru a verifica integritatea datelor și să se rostogolească înapoi tranzacția.







Trigger - este un SQL-procedura compilate, a căror îndeplinire se datorează apariția anumitor evenimente într-o bază de date relațională. Utilizarea bistabile pentru cea mai mare parte este foarte convenabil pentru utilizatorii bazei de date. Cu toate acestea, utilizarea lor este adesea asociat cu costuri suplimentare de resurse pentru operațiuni I / O. În cazul în care aceleași rezultate (cu un resurse aeriene low cost mult mai mici) pot fi obținute prin utilizarea de proceduri stocate sau aplicații care utilizează declanșează inadecvate.

Declanșează - un instrument special este SQL server utilizat pentru a menține integritatea datelor în baza de date. Cu constrângerile de integritate, reguli și valori implicite nu este întotdeauna posibil pentru a atinge nivelul dorit de funcționalitate. Adesea, aceasta trebuie să pună în aplicare algoritmi complecși de validare a datelor pentru a asigura autenticitatea și realitatea lor. Mai mult decât atât, este uneori necesar pentru a urmări modificările în tabelul de căutare pentru a schimba datele asociate dorit. Declanșatorii poate fi privit ca un fel de filtru, care intră în funcțiune după efectuarea tuturor operațiunilor, în conformitate cu normele, valorile implicite, etc.

Un declanșator este un tip special de procedură stocată, executați automat serverul atunci când încercați să schimbați datele în tabele, cu care sunt asociate declanșatoare. Fiecare flip-flop este legat de o anumită masă. Toate modificările aduse acestora datele sunt tratate ca o singură tranzacție. În cazul unor erori sau date de corupție se produce derula înapoi tranzacția. Astfel, modificările sunt interzise. Anulate și toate modificările deja făcute de trăgaci.

Se creează un declanșator numai proprietarul bazei de date. Această restricție împiedică modificări accidentale la structura de tabele, moduri de a comunica cu ei și alte obiecte, etc.

Un declanșator este un foarte util și, în același timp, un instrument periculos. Deci, în cazul în care nu logica muncii sale poate distruge cu ușurință o intreaga baza de date, astfel încât declanșatoare trebuie să fie depanate foarte atent.

Spre deosebire de declanșare rutine obișnuite se execută în mod implicit, în fiecare caz de apariție a evenimentului de declanșare. în plus, nu are nici un argument. Aducerea in vigoare este uneori numit pe trăgaci de lansare. Cu ajutorul următoarelor obiective sunt atinse declanșează:

  • verificarea corectitudinii datelor și efectuarea de constrângeri complexe de integritate a datelor, care sunt dificil, dacă nu imposibil, să se mențină integritatea prin intermediul restricțiilor impuse pe masa;
  • emiterea de avertismente, amintind de necesitatea de a efectua anumite acțiuni atunci când actualizați tabelul, pus în aplicare într-un anumit fel;
  • acumularea de informații de audit prin fixarea detaliile modificărilor și persoanele care le execută;
  • suport de replicare.

CREATE TRIGGER Formatul de bază al comenzii este prezentată mai jos:

evenimente declanșatoare constau în inserție, ștergerea și actualizarea de rânduri în tabel. În acest din urmă caz, evenimentul declanșator, puteți specifica numele specifice ale coloanelor de masă. Ora de începere de declanșare este determinată de un cuvânt cheie înainte (de declanșare se execută înainte de evenimentele conexe) sau după (după execuție).

Efectuate pași set flip-flop pentru fiecare rând (pentru fiecare rând), acoperite de eveniment sau o singură dată pentru fiecare eveniment (pentru fiecare afirmație).

denumire <список_старых_или_новых_псевдонимов> Se referă la componente, cum ar fi rândul vechi sau nou (OLD / NEW) fie tabelul vechi sau noi (OLD TABLE / NEW TABLE). Este clar că vechile valori nu se aplică pentru a insera evenimente și noi - pentru a elimina evenimente.

Atunci când este utilizat în mod corespunzător declanșează poate fi un mecanism foarte puternic. Principalul lor avantaj este că funcțiile standard sunt stocate în baza de date și activate în mod constant de fiecare dată când este reîmprospătată. Acest lucru poate simplifica foarte mult cererea. Cu toate acestea, ar trebui să menționeze, de asemenea, deficiențele inerente de declanșare:

  • complexitate: atunci când se deplasează unele funcții la baza de date complică sarcina de design, implementare și administrare;
  • funcționalitate ascunsă: transferul funcțiilor în baza de date și le stochează sub forma unuia sau mai multor factori declanșatori, uneori, duce la ascunde de utilizator unele funcționalități. Deși acest lucru este într-o oarecare măsură simplifică munca, dar, din păcate, aceasta poate provoca reacții adverse neplanificate, nedorite și potențial dăunătoare, deoarece în acest caz, utilizatorul nu este în măsură să controleze toate procesele care au loc în baza de date;
  • impact asupra performanței: Înainte de fiecare comandă pentru a schimba baza de date starea bazei de date ar trebui să verifice starea de declanșare pentru a clarifica necesitatea de a rula pe trăgaci pentru această echipă. Efectuarea unor astfel de calcule afectează performanța generală a bazei de date, dar în momentele de reducere a sarcinii de vârf poate deveni deosebit de important. Este clar că, odată cu creșterea numărului de declanșatoare și a crescut deasupra capului asociate cu astfel de operațiuni.

declanșatori Greselile poate duce la probleme grave, cum ar fi, de exemplu, apariția încuietorile „mort“. Declanșatoare poate bloca pentru o lungă perioadă de timp, o mulțime de resurse, deci ar trebui să acorde o atenție deosebită reducerii la minimum a conflictelor de acces.

Implementarea declanșatoare în mediul SQL Server, MS

Punerea în aplicare a MS SQL Server Baze de date utilizează următoarea declarație pentru a crea sau modifica un declanșator:







Declanșatorul poate fi creat numai în baza de date curentă, dar recursul este permisă într-un declanșator la alte baze de date, inclusiv cele situate pe un server de la distanță.

Luați în considerare numirea argumentele comenzii CREATE | ALTER TRIGGER.

Numele de declanșare trebuie să fie unic în cadrul bazei de date. În plus, puteți specifica numele proprietarului.

tipuri de declanșatori

În SQL Server, există doi parametri care definesc comportamentul declanșatoare:

Declanșatoare sunt clasificate în funcție de tipul de comandă la care răspund.

Există trei tipuri de declanșatoare:

  • INSERT TRIGGER - a alerga atunci când încercați să introduceți date folosind comanda INSERT.
  • UPDATE TRIGGER - rula atunci când încercați să schimbați datele folosind comanda UPDATE.
  • DELETE TRIGGER - rula atunci când încercați să ștergeți date utilizând comanda de ștergere.

Proiectarea [DELETE] [,] [INSERT] [,] [UPDATE] cât și pentru | DUPĂ | INSTEAD OF><[INSERT] [,] [UPDATE] определяют, на какую команду будет реагировать триггер. При его создании должна быть указана хотя бы одна команда. Допускается создание триггера. реагирующего на две или на все три команды.

Argumentul CU ADAUGARE vă permite să creați mai multe declanșatoare de fiecare tip.

Când creați un declanșator cu un argument NU REPLICARE interzice difuzarea în timpul mecanismelor de replicare tabele de modificare.

Proiectare AS sql_operator [. n] definește un set de operatori și comenzi SQL- care vor fi executate atunci când este pornit pe trăgaci.

Rețineți că în bistabilul nu este permis efectua mai multe operații, cum ar fi:

  • a crea, modifica și șterge baze de date;
  • Restaurarea o copie de rezervă a bazei de date sau a jurnalului de tranzacții.

Aceste comenzi nu sunt permise, deoarece ele nu pot fi anulate în caz de derulare înapoi, care rulează pe trăgaci. Această interdicție este puțin probabil să afecteze într-un fel funcționalitatea pentru a crea declanșatoare. Este greu de găsit o situație în care, de exemplu, după schimbarea liniei mesei este necesară pentru a restaura o copie de rezervă jurnal de tranzacții.

declanșare programare

Atunci când adăugarea de comenzi, schimba și șterge înregistrări, serverul creează două tabele speciale: inserate și șterse. Ele conțin liste de șiruri care vor fi introduse sau scoase la încheierea tranzacției. Structura inserate și șterse tabele identice cu structura tabelelor, pentru care se determină un declanșator. Pentru fiecare declanșare creează propriul set de tabele inserate și șterse. Prin urmare, nici un alt declanșator nu va fi în măsură să le acceseze. În funcție de tipul de operațiune care a cauzat declanșator de execuție. conținutul tabelelor inserate și șterse pot fi diferite:

  • - INSERT comanda introdusă în tabel conține toate șirurile care utilizatorul încearcă să introducă într-un tabel; în tabel nu vor fi șterse linii audio; după ce dispozitivul de blocare toate rândurile din tabelele inserate în tabela sursă mișcare;
  • comanda delete - eliminat din tabel va conține toate rândurile pe care utilizatorul încearcă să șteargă; declanșare poate verifica fiecare linie și a determina dacă este permisă îndepărtarea acestuia; în tabel nu s-ar introduce linii audio;
  • comanda UPDATE - atunci când sunt executate la masa se elimină valorile vechi de rânduri, care urmează să fie șterse după finalizarea cu succes a declanșatorului. Noile valori ale rândurilor cuprinse în tabelul inserat. Aceste linii vor fi adăugate la masa inițială după executarea cu succes a unui declanșator.

Pentru informații cu privire la numărul de rânduri care urmează să fie modificate după finalizarea cu succes a declanșatorului. Puteți utiliza funcția @@ ROWCOUNT; returnează numărul de rânduri procesate de ultima comandă. Trebuie subliniat faptul că declanșatorul nu se execută atunci când încercați să modificați un anumit rând, iar în momentul în care comanda de schimbare. O astfel de echipă lucrează pe mai multe linii, astfel încât trăgaciul trebuie să se ocupe de toate aceste linii.

Dacă trăgaciul a constatat că 100 de insera, actualiza sau șterge rânduri, doar unul sau nu îndeplinește celelalte condiții, atunci nici un rând nu va fi inserat, modificate sau șterse. Acest comportament se datorează cerințelor tranzacției - trebuie sa fie executat sau toate modificările, sau nici unul.

Trigger rulează tranzacție așa cum este definită în mod implicit, astfel încât dispozitivul de blocare este permisă utilizarea în comenzile de gestionare a tranzacției. În special, depistarea cazurilor de încălcare a constrângerilor de integritate pentru a întrerupe executarea unui declanșator, și anula toate modificările care au încercat să ruleze utilizatorul trebuie să utilizeze ROLLBACK TRANZACȚIE.

Pentru o listă de coloane care sunt schimbate în timpul unei INSERT sau UPDATE comenzi. a cauzat executarea declanșatorului. Puteți utiliza funcția de COLUMNS_UPDATED (). Se returnează un număr binar, fiecare bit de la cele mai mici corespunde o coloană a tabelului (în ordinea coloanelor atunci când este creat tabelul). Dacă bitul este setat la „1“, coloana corespunzătoare a fost modificat. În plus, faptul de a schimba unei coloane determină UPDATE funcția (column_name).

Pentru a șterge un declanșator, utilizați comanda

Exemple de utilizare a declanșatoare.

Exemplul 14.1. Folosind un declanșator pentru punerea în aplicare a restricțiilor asupra valorii. Adăugată la suma tranzacției intrări în tabelul de bunuri vândute nu ar trebui să fie mai mică decât restul său din tabelul material.

inserarea intrări în tabelul de comandă tranzacții poate fi, de exemplu, după cum urmează:

de declanșare generat trebuie să răspundă la punerea sa în aplicare după cum urmează: este necesar pentru a anula comanda, în cazul în care valoarea în reziduu bunuri de masă a fost de magazie cantități mai mici de bunuri vândute cu codul introdus (exemplul Cod produs = 3). În înregistrarea introdusă cantitatea de mărfuri indicată cu un semn „+“, în cazul în care bunurile sunt livrate, iar semnul „-“ în cazul în care este vândut. Prezentat de trăgaciul configurat să proceseze doar o singură intrare fiind adăugate.

Exemplul 14.1. Folosind un declanșator pentru aplicarea restricțiilor asupra valorii.

Exemplul 14.2. Utilizați declanșare de colectare a datelor statistice.

Creați un declanșator pentru operația de prelucrare de înregistrare în tabelul de inserție de tranzacție. de exemplu, următoarea comandă:

bunurile livrate cu codul 3 din codul de client în mărime de 1 200 de unități.

La vânzarea sau primirea de bunuri trebuie să ajusteze valoarea stocurilor sale. În cazul în care stocul pe o parte este încă acolo, trebuie să adăugați o intrare la Depozitul de masă. Trigger ocupa doar un singur șir fiind adăugate.

Exemplul 14.2. Utilizați declanșare pentru colectarea datelor statistice.

Exemplul 14.3. Creați un declanșator pentru operația de procesare de ștergere a Tranzacției tabelul de intrare. de exemplu, următoarea comandă:

Pentru produsele al căror cod este introdus atunci când ștergeți o înregistrare, trebuie să reglați echilibrul în stoc. procese de declanșare numai o înregistrare amovibil.

Exemplul 14.3. Declanșatorul de procesare operațiuni pentru ștergerea intrării din tabel

Exemplul 14.4. Creați un declanșator pentru a schimba operația de procesare de înregistrare în tabelul de tranzacție. de exemplu, comanda:

în toate tranzacțiile cu produsele care poartă codul egal cu 3, pentru a reduce cantitatea de 10 unități.

Comanda se poate modifica mai multe intrări în tabelul de tranzacție. Prin urmare, ne arată cum să creați un de declanșare. de prelucrare mai mult de o intrare. Pentru fiecare înregistrare modificat este necesară pentru un vechi (înainte de modificare) Codul produsului reduce reziduuri Postul în stoc de valoarea vechi (înainte de a schimba) numărul postului și un nou (după modificare) reziduului codul produsului mai mare în stoc prin valoarea noii valori (după modificare). (Din tabelul inserat) pentru a procesa toate înregistrările modificate, să introducă cursoare, care păstrează toate toate noile valori și vechile (eliminat din tabel), și.

Exemplul 14.4. declanșa pentru a schimba operațiune de prelucrare în tabelul de intrare

În cele de mai sus declanșează nici o comparație a cantității de mărfuri atunci când schimbă înregistrarea tranzacției cu restul în stoc.

Exemplul 14.5. Corectați această deficiență. Pentru a genera un mesaj de eroare în corpul unei utilizări de declanșare comandă MS SQL Server RAISERROR. ale cărui argumente sunt mesajul, severitatea și starea de eroare.

Exemplul 14.5. declanșare revizuit pentru a schimba operațiune de prelucrare în tabelul de intrare

Exemplul 14.6. Exemplul 14.5 anulează toate modificările atunci când este imposibil să pună în aplicare cel puțin una dintre ele. Creați un declanșator. Vă permite să anulați modificarea doar câteva înregistrări și de a efectua cealaltă modificare.

În acest caz, declanșatorul nu se efectuează după schimbarea înregistrărilor și în loc de a schimba echipa.

Exemplul 14.6. Trigger care vă permite să anulați modificările numai câteva înregistrări și de a efectua cealaltă modificare.