SQL triger on spetsiaalne andmebaasi objekt, mis käivitab automaatselt teatud sündmus (nt INSERT, UPDATE, DELETE). Trigerid aitavad automatiseerida protsessid andmebaasis.
SQL Server.
- loome andmebaasi ja 2 tabelit. 1. tabel – kuhu kasutaja sisestab andmeid (linnad). 2. tabel – logi, kus triger lisab jälgitud andmeid.
create database trigerMatvii
use trigerMatvii
--tabel linnad
create table linnad(
linnId int primary key identity(1,1),
linnanimi varchar(50) unique,
rahvaarv int not null);
--tabel logi
create table logi(
Id int primary key identity(1,1),
kuupaev datetime,
andmed text);
2. trigeri loomine
INSERT TRIGER, mis jälgib andmete lisamine tabelisse linnad.
create trigger linnalisamine
on linnad
for insert
as
insert into logi(kuupaev, andmed)
select
getdate(),
concat('lisatud linn: ', inserted.linnanimi,
' | rahvaarv: ', inserted.rahvaarv, ' | id: ', inserted.linnId)
from inserted;

Trigger = päästik
Delete triger
create trigger linnakustutamine
on linnad
for delete
as
insert into logi(kuupaev, andmed)
select
getdate(),
concat('Kustutatud linn: ', deleted.linnanimi,
' | rahvaarv: ', deleted.rahvaarv, ' | id: ', deleted.linnId)
from deleted;
delete from linnad where linnId=1;
select * from linnad;
select * from logi;
Update trigger
create trigger linnauuendamine
on linnad
for update
as
insert into logi(kuupaev, andmed)
select
getdate(),
concat('Vana linna andmed: ', d.linnanimi,
' | rahvaarv: ', d.rahvaarv, ' | id: ', d.linnId,
'Uued linna andmed: ', i.linnanimi,
' | rahvaarv: ', i.rahvaarv, ' | id: ', i.linnId)
from deleted d inner join inserted i
on d.linnId=i.linnId;
Ins, del trigger
create trigger linnalisamineKustutamine
on linnad
for insert, delete
as
begin
set nocount on;
insert into logi(kuupaev, andmed, kasutaja)
select
getdate(),
concat('lisatud linn: ', inserted.linnanimi,
' | rahvaarv: ', inserted.rahvaarv, ' | id: ', inserted.linnId),
system_user
from inserted
union all
select
getdate(),
concat('Kustutatud linn: ', deleted.linnanimi,
' | rahvaarv: ', deleted.rahvaarv, ' | id: ', deleted.linnId),
system_user
from deleted;
end;
--deaktiveerime linnalisamine ja linnaKustutamine
disable trigger linnalisamine on linnad;
disable trigger linnakustutamine on linnad;
insert into linnad (linnanimi, rahvaarv)
values ('Kegli', 600000);
select * from linnad;
select * from logi;
Delete from linnad where linnId=5
3. Auto
Lisame tabelit
create table autod(
autoId int primary key identity(1,1),
antonR varchar(50),
omanik varchar(50),
mark varchar(50),
aasta int
);
create table autologi(
Id int primary key identity(1,1),
kuupaev datetime,
andmed text,
kasutaja varchar(50)
);
AutoLisamine
create trigger autoLisamine
on autod
for insert
as
insert into autologi(kuupaev, andmed, kasutaja)
select
getdate(),
concat(
'Lisatud auto | ID: ', i.autoId,
' | antonR: ', i.antonR,
' | omanik: ', i.omanik,
' | mark: ', i.mark,
' | aasta: ', i.aasta
),
system_user
from inserted i;
Auto Kustutamine
create trigger autoKustutamine
on autod
for delete
as
insert into autologi(kuupaev, andmed, kasutaja)
select
getdate(),
concat(
'Kustutatud auto | ID: ', d.autoId,
' | antonR: ', d.antonR,
' | omanik: ', d.omanik,
' | mark: ', d.mark,
' | aasta: ', d.aasta
),
system_user
from deleted d;
Auto Uuendamine
create trigger autoUuendamine
on autod
for update
as
insert into autologi(kuupaev, andmed, kasutaja)
select
getdate(),
concat(
'MUUTMINE | Vana - ID: ', d.autoId,
' | antonR: ', d.antonR,
' | omanik: ', d.omanik,
' | mark: ', d.mark,
' | aasta: ', d.aasta,
' || Uus - ID: ', i.autoId,
' | antonR: ', i.antonR,
' | omanik: ', i.omanik,
' | mark: ', i.mark,
' | aasta: ', i.aasta
),
system_user
from deleted d
inner join inserted i on d.autoId = i.autoId;