Mysql тригери или тригери - Определяне на събития и моменти

Съдържание
Изявлението, което създава тригер, е
CREATE TRIGGER тригер_име на събитието време на таблица НА ВСЕКИ РЕД

Момент
Това може да бъде СЛЕД или ПРЕДИ, тоест след или преди да възникне sql събитие, като например създаване на запис, изтриване, избор, търсене, промяна и т.н.
Събитие
Ние наричаме всяка от sql операциите събитие, тя може да бъде INSERT, UPDATE или DELETE. Изборите не могат да се правят от тригери (Изберете * от …) Тази операция се извършва от съхранени процедури, а не от тригери.
Общи изявления и команди за управление на тригери или тригери
Създаваме тригер за одит на продажбите на автомобилна агенция, всеки път, когато оператор или продавач променя данните на клиент, автоматично в таблица с audits_cliente ще посочим датата и часа, кой е извършил промяната и кой е клиентът това беше променено
 СЪЗДАВАНЕ НА TRIGGER client_audit_trigger СЛЕД АКТУАЛИЗИРАНЕ НА КЛИЕНТИТЕ ЗА ВСЕКИ РЕД ВСТАНЯВАНЕ В client_audit (clientid, modified_by, date) VALUES (OLD.clientid, NEW.idoperator, NOW ()) 

Поискайте всички тригери, налични в базата данни
Показване на тригери

В този случай, този, който създаваме клиентски одит и виждаме неговата функционалност в различни колони, събитие за актуализация в таблицата на клиентите, което ще направи вмъкване и неговият администраторски потребител е root
Изтрийте тригер от базата данни
DROP TRIGGER име на тригер

Как да извикате съхранени процедури в тригер
Ще анализираме пример за продуктова база данни и че при генериране на продажба продавачът трябва също да генерира комисионната, която печели, след това комисионната за продажба трябва да се актуализира след вмъкване или генериране на новата продажба или може да бъде и след генериране на фактура , в зависимост от бизнес модела, който ще бъде разработен, но е достатъчно, за да бъде разбран примерът.
Създаваме съхранена процедура, която ще изчисли комисионната въз основа на количеството продаден продукт.
 DELIMITER $$ CREATE PROCEDURE pa_commission` (IN p_vendor ID INT, IN p_product ID INT, IN количество INT) НАЧАЛО ОБЯВЯВАНЕ totalcommission INT DEFAULT 0; Изберете комисионна от продукти, където productid = p_productid; totalcommission = комисионна * p_amount вмъкнете в стойности на комисионни (продавач, комисионна) (sellerid, productid, комисионна, totalcommission); КРАЙ $$ DELIMITER $$ 

Сега създаваме новия тригер за продажба. Това задействане ще бъде изпълнено след въвеждане на продажба и вземане на данните за този или за подробностите за продажбите.
 CREATE TRIGGER new sale СЛЕД ИНСЕРТ на продажбите ЗА ВСЕКИ РЕД ЗАПОЧНЕТЕ CALL pa_commissions (new.id продавач, new.idproduct, new.quantity); КРАЙ $$ 

Можем да видим, че съхранената процедура е извикана, за да може да провери данните за продукта, комисионната и по този начин да може автоматично да изчисли размера на комисионната.
Бихме могли да го направим още по -сложен, за да знаем дали комисионната и продажбата вече съществуват, след което да ги променим и да не ги вмъкваме отново.
За това също трябва да разпознаем номера на продажбите или фактурите, след това търсим дали продуктът вече съществува в номера на продажбите и продавача, това означава, че той вече съществува и е пуснат в експлоатация, затова ще модифицираме и няма да го вмъкваме като нова продажба.
 изберете count (productid)> 0 в вече съществува от комисиони, където sellerid = sellerid и salesid = salesid; ако вече съществува, комисиите UPDATE определят комисионна = обща комисия, където sellerid = sellerid и salesid = salesid; иначе вмъкнете в комисионни (продавач, комисионна) стойности (sellerid, productid, комисионна, тотална комисионна); край ако; 
Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка
wave wave wave wave wave