Mysql declanșează sau declanșează - Definirea evenimentelor și momentelor

Cuprins
Afirmația care creează un declanșator este
CREATE TRIGGER trigger_name eveniment timp ON tabel pe fiecare rând

Moment
Poate fi DUPĂ sau ÎNAINTE, adică după sau înainte de a se produce un eveniment sql, cum ar fi crearea unei înregistrări, ștergerea, selectarea, căutarea, modificarea etc.
Eveniment
Numim oricare dintre operațiunile sql un eveniment, acesta poate fi INSERT, UPDATE sau DELETE. Nu se pot face selecții din declanșatoare (Selectați * din …) această operațiune se efectuează din proceduri stocate și nu din declanșatoare.
Declarații generale și comenzi pentru a gestiona declanșatoarele sau declanșatoarele
Creăm un declanșator pentru un audit în vânzările unei agenții auto, de fiecare dată când un operator sau vânzător modifică datele unui client, automat într-un tabel de audituri_cliente vom indica data și ora, cine a făcut modificarea și care este clientul care a fost modificat
 CREATE TRIGGER client_audit_trigger DUPĂ ACTUALIZAREA CLIENTELOR PENTRU FIECARE RÂND INSERAȚI ÎN client_audit (clientid, modified_by, date) VALORI (OLD.clientid, NEW.idoperator, ACUM ()) 

Interogați toate declanșatoarele disponibile în baza de date
Afișează declanșatoarele

În acest caz, cel pe care îl creăm audit client și îi vedem funcționalitatea în diferite coloane, un eveniment de actualizare în tabelul clienților care va face o inserție și utilizatorul administrator al acestuia este root
Ștergeți un declanșator din baza de date
DROP TRIGGER triggername

Cum să apelați procedurile stocate într-un declanșator
Vom analiza un exemplu pentru o bază de date de produse și că atunci când generează o vânzare un vânzător trebuie să genereze și comisionul pe care îl câștigă, atunci comisionul pe vânzare trebuie actualizat după introducerea sau generarea noii vânzări sau ar putea fi și după generarea unei facturi , în funcție de modelul de afaceri care trebuie dezvoltat, dar este suficient ca exemplul să fie înțeles.
Creăm o procedură stocată care va calcula comisionul pe baza cantității unui produs vândut.
 DELIMITER $$ CREATE PROCEDURE pa_commission` (IN p_vendor ID INT, IN p_product ID INT, IN quantity INT) BEGIN DECLARE totalcommission INT DEFAULT 0; Selectați comision din produsele unde productid = p_productid; totalcommission = commission * p_amount insert in commissions (seller, commission) values ​​(sellerid, productid, commission, totalcommission); ÎNCHEI $$ DELIMITER $$ 

Acum creăm noul declanșator de vânzare. Acest declanșator va fi executat după introducerea unei vânzări și preluarea datelor despre acest detaliu sau despre detaliile vânzărilor.
 CREAȚI TRIGGER vânzare nouă DUPĂ INSERIRE la vânzări PENTRU FIECARE RÂND ÎNCEPE SUNA pa_commissions (new.id vânzător, new.idproduct, new.quantity); ÎNCHEI $$ 

Putem vedea că procedura stocată este chemată pentru a putea consulta datele produsului, comisionul și astfel putem calcula automat suma comisionului.
Am putea, de asemenea, să-l facem mai complex, permițându-ne să știm dacă comisionul și vânzarea există deja, apoi să îl modificăm și să nu îl mai inserăm din nou.
Pentru aceasta ar trebui să recunoaștem și numărul vânzărilor sau al facturii, apoi căutăm dacă produsul există deja în numărul vânzărilor și al vânzătorului, implică faptul că există deja și a fost comandat, prin urmare vom modifica și nu vom introduce ca o nouă vânzare.
 selectați numărul (productid)> 0 în deja există din comisioane unde sellerid = sellerid și salesid = salesid; dacă există deja atunci comisioane UPDATE set commission = totalcommission unde sellerid = sellerid și salesid = salesid; altfel introduceți în comisioane (vânzător, comision) valori (sellerid, productid, commission, totalcommission); incheie daca; 
V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv
wave wave wave wave wave