Koristimo bazu: A13_DVD (ako je imate na MS SQL Serveru, prvo obrišite staru bazu, pa postavite verziju: Kreirej_popuni_bazu_DVD_kolekcija)


Uvod

U radu sa bazama podataka često je potrebno da se određene akcije izvrše automatski kada dođe do promene podataka. Na primer:

  • kada se doda novi zapis
  • kada se izmeni postojeći zapis
  • kada se obriše podatak

Postavlja se pitanje:   Da li možemo naterati bazu da sama reaguje na ove promene?

Odgovor je: da, pomoću okidača (TRIGGER-a).

Okidači predstavljaju važan mehanizam koji omogućava automatsko izvršavanje SQL koda kao reakciju na određeni događaj u bazi.


1. Šta je okidač (TRIGGER)?

Okidač (TRIGGER) je posebna vrsta SQL objekta koji se automatski izvršava kada se desi određena promena nad tabelom.

Te promene su:

  • INSERT (unos podataka)
  • UPDATE (izmena podataka)
  • DELETE (brisanje podataka)

Drugim rečima, okidač možemo zamisliti kao „automatizovanu reakciju baze na promenu podataka“


2. Kada se koriste okidači?

Okidači se koriste kada želimo:

  • da pratimo promene (logovanje)
  • da proverimo validnost podataka
  • da automatski ažuriramo druge tabele
  • da sprečimo neispravne izmene

Na primer: beleženje ko je i kada izvršio izmenu, zabrana brisanja važnih podataka ili automatsko ažuriranje statistike


3. Vrste okidača

U MS SQL Server-u postoje dve osnovne vrste:

 AFTER okidači

Izvršavaju se nakon što se promena izvrši.

 INSTEAD OF okidači

Izvršavaju se umesto osnovne operacije.


4. Posebne tabele: inserted i deleted

Okidači koriste dve specijalne tabele:

  • inserted → sadrži nove podatke

  • deleted → sadrži stare podatke

Na primer:

  • kod INSERT → koristi se inserted
  • kod DELETE → koristi se deleted
  • kod UPDATE → koriste se obe

5. Kreiranje okidača

Sintaksa:

CREATE TRIGGER naziv_okidaca
ON naziv_tabele
AFTER INSERT/UPDATE/DELETE
AS
BEGIN
    SQL naredbe
END;

6. Primeri (A13_DVD)

Primer 1: Logovanje unosa glumca

CREATE TABLE Log_Glumac (
    Poruka VARCHAR(100)
);
CREATE TRIGGER trg_InsertGlumac
ON Glumac
AFTER INSERT
AS
BEGIN
    INSERT INTO Log_Glumac
    VALUES ('Dodat je novi glumac');
END;

Primer 2: Sprečavanje brisanja

CREATE TRIGGER trg_DeleteGlumac
ON Glumac
INSTEAD OF DELETE
AS
BEGIN
    PRINT 'Brisanje nije dozvoljeno!';
END;

Primer 3: Reakcija na UPDATE

CREATE TRIGGER trg_UpdateFilm
ON Film
AFTER UPDATE
AS
BEGIN
    PRINT 'Podaci o filmu su izmenjeni';
END;

7. Brisanje (odbacivanje) okidača

Sintaksa:

DROP TRIGGER naziv_okidaca;

Primer:

DROP TRIGGER trg_InsertGlumac;

Vežbe

Zadatak 1 - Kreirati okidač koji beleži unos novog filma.


Zadatak 2 - Kreirati okidač koji sprečava brisanje filmova.


Zadatak 3 - Kreirati okidač koji reaguje na promenu trajanja filma.


Zadatak 4 - Obrisati jedan okidač.


Dodatni zadaci za vežbu

Zadatak 5 - Napraviti okidač za tabelu Producent koji beleži INSERT.


Zadatak 6 - Napraviti okidač koji sprečava DELETE u tabeli Film.


Zadatak 7 - Napraviti okidač koji reaguje na UPDATE u tabeli Glumac.


Zadatak 8 - Objasniti razliku:  AFTER vs INSTEAD OF okidač


Zadaci za rad kod kuće

Zadatak 9 - Napraviti log tabelu za izmene filmova.


Zadatak 10 - Napraviti okidač koji beleži svaku izmenu filma.


Zadatak 11 - Napraviti okidač koji sprečava unos filma bez naziva


Rešenje (primer)

CREATE TRIGGER trg_LogFilm
ON Film
AFTER INSERT
AS
BEGIN
    PRINT 'Novi film je dodat';
END;

Zaključak

Okidači su alat koji omogućava da baza podataka automatski reaguje na promene. Oni omogućavaju dodatnu kontrolu i automatizaciju, ali zahtevaju pažljivo korišćenje.

Šta treba zapamtiti:

  • okidači se izvršavaju automatski
  • vezani su za događaje (INSERT, UPDATE, DELETE)
  • mogu da kontrolišu i prate rad baze

...

Last modified: Wednesday, 6 May 2026, 8:10 AM