Bosna i Hercegovina



#1 29.06.2015-11:59
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,694


Subject: Trigeri-okidaci (triggers)
Trigeri su objekti (uskladištene procedure) pridruženi tabeli, koji se automatski aktiviraju kada se desi neki dogadjaj vezan za tu tabelu.

Trigeri se aktiviraju prilikom izvršenja:
- Insert
-Update I
- Delete naredbi.
Trigeri se automatski pozivaju od strane MySQL-a (ne koristi se Execute naredba). Sami trigeri nemaju ulazne ni izlazne parametre. Triger se poziva prilikom svakog izvrsenja odredjene naredbe odnosno svaki put kada se desi odredjeni dogadjaj.

Trigeri ne mogu biti korisceni u SELECT naredbi na isti nacin kao procedura.

Nastavit ce se...
Pozdrav
↑  ↓

#2 29.06.2015-12:10
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,694


Subject: Re: Trigeri-okidaci (triggers)
Sintaksa za kreiranje trigera je:
CREATE TRIGGER naziv_trigera
vreme_izvršavanja_trigera
dogadjaj
ON tbl_name
FOR EACH ROW trigger_stmt

Trigeri se ne mogu vezivati za privremene tabele.
Da bi se pokrenuo triger potrebno je da user ima odredjene privilegije nad tabelom.Kada je triger aktiviran, Definer klauzula određuje privilegije koje se primenjuju.
Triger_time se odnosi na vrijeme okidanja, odnosno odredjuje da li ce se triger aktivirati prije (BEFORE) ili poslije (AFTER) uslova koji ga aktivira.
Dakle, triger_time moze biti:
BEFORE -prije i
AFTER- poslije uslova koji ga aktivira tj. insert update ili delete.
Trigger_event:
- INSERT: triger se aktivira svaki put kada se novi zapis umece u tabelu (npr. uz naredbe INSERT, LOAD DATA,REPLACE)
-UPDATE: triger se aktivira svaki put kada se zapis azurira
-DELETE : triger se aktivira svaki put kada se brise zapis iz tabele. Medjutim, naredba DROP TABLE ne
aktivira triger.
Ne mogu se definisati dva trigera na jednoj tabeli koji se okidaju na pojavu istog dogadjaja i u isto vreme.
Na primer, ne mozemo imati dva BEFORE UPDATE trigera nad tabelom. Medjutim, mozemo imati na istoj
tabeli BEFORE UPDATE i BEFORE INSERT trigere, ili BEFORE UPDATE i AFTER UPDATE triger.
Trigger_stmt predstavlja komande koje se izvrsavaju kada se triger pokrene. Ukoliko zelimo da pokrenemo vise komandi, koristimo BEGIN ... END . U okviru trigera, mozemo da se pozovemo na kolonu tabele nad kojom je triger aktiviran koristeci alijase OLD i NEW.
OLD.col_name se odnosi na kolonu postojeceg zapisa pre njegovog azuriranja ili brisanja,dok se
NEW.col_name odnosi na nov zapis koji ce biti insertovan ili na postojeci zapis nakon azuriranja.
Modifikovanje i brisanje trigera
Ukoliko zelimo da promenimo definiciju nekog trigera, onda je to moguce uraditi na dva nacina. Ili obrisati triger i ponovo ga kreirati ili koristiti Alter Trigger naredbu.
Za brisanje trigera koristi se:
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
PRIMER (za samostalni rad): Kreirajmo BEFORE INSERT triger i nazovimo ga ins_sum. U bazi
test u tabeli account koja je kreirana iskazom
CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
Triger treba da sabere vrijednosti umetnute u kolonu amount.

Nastavit ce se ...
Pozdrav
Ovaj komentar je mijenjan 2 puta. zadnja izmjena 29.06.2015-12:57 od strane zxz. ↑  ↓

#3 30.06.2015-14:58
zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,694


Subject: Re: Trigeri-okidaci (triggers)
CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
Query OK, 0 rows affected (0.03 sec)
mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
-> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
Sad je kreiran triger. Testirajmo njegov rad.
mysql> SET @sum = 0;
mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
mysql> SELECT @sum AS 'Total amount inserted';
+-----------------------+
| Total amount inserted |
+-----------------------+
| 1852.48 |
+-----------------------+
vrednost promenljive @sum (zbog parametara naredbe INSERT) je 14.98 + 1937.50 - 100,
to jest 1852.48.
Uklanjanje trigera sa DROP TRIGGER. Mora se navesti ime sheme (sem ako nije
podrazumevana).
Pozdrav
↑  ↓

Stranice (1): 1

All times are GMT +01:00. Current time: 25.06.2018-14:40.