Triger (päästik)- protsess, mille abil tema sisse kirjutatud(INSERT, DELETE, UPDATE) tegevused automaatselt käivitatakse.
kontrollimiseks create database
create database radashevaTriger
use radashevaTriger
Create tables. Linnad and Logi.
Create table linnad(
linnID int identity(1,1) PRIMARY KEY,
linnanimi varchar(15),
rahvaarv int);
--tabel logi naitab adminile kuidas tabel linnad kasustatakse, tabel logi täidab triger
Create table logi(
id int identity(1,1) PRIMARY KEY,
aeg DATETIME,
toiming varchar(100),
andmed varchar(200),
kasutaja varchar(100)
)
INSERT TIGER, mis jälgib tabeli linnad täiymine
CONCAT() funktsioon liidab mitu tekstivälja üheks stringiks. Triggeris kasutatakse seda, et salvestada muudatuste logi, luua kokkuvõtteid või koostada kohandatud tekstivälju muudatuste põhjal.
create trigger linnaLisamine
ON linnad
for insert
as
insert into logi(aeg, kasutaja, toiming, andmed)
select
GETDATE(),
SYSTEM_USER,
'linn on lisatud',
CONCAT(inserted.linnanimi,', rahvaarv : ', inserted.rahvaarv)
from inserted;
trigeri tegevuse kontroll
insert into linnad (linnanimi, rahvaarv)
values ('Tallinn', 650000);
select * from linnad;
select * from logi;


DELETE TRIGER, jälgib linna kustatamine tabelis linnad
create trigger linnaKustutamine
ON linnad
for delete
as
insert into logi(aeg, kasutaja, toiming, andmed)
select
GETDATE(),
SYSTEM_USER,
'linn on kustutatud',
deleted.linnanimi
from deleted;
kontroll
delete from linnad where linnID=1
select * from linnad;
select * from logi;

UPDATE TRIGER
UPDATE() funktsiooni kasutatakse INSERT- või UPDATE-päästiku kehas kõikjal, et kontrollida, kas päästik peaks teatud toiminguid käivitama.
create trigger linnaUpdate
ON linnad
for update
as
insert into logi(aeg, kasutaja, toiming, andmed)
select
GETDATE(),
SYSTEM_USER,
'linn on updated',
concat('vanad andmed: ', deleted.linnanimi,', ', deleted.rahvaarv,
' uued andmed: ', inserted.linnanimi,', ', inserted.rahvaarv)
from deleted
inner join inserted
on deleted.linnID=inserted.linnID;
kontroll:

update linnad set rahvaarv=650001
where linnID=2;
select * from linnad;
select * from logi;
GitHub: https://github.com/AnastasiiaRadasheva/Andmebaasid/blob/main/triggers
XAMPP’is(sama)
Database with tables

INSERT TIGER

insert into logi(aeg, kasutaja, toiming, andmed)
VALUES(
NOW(),
USER(),
'linn on lisatud',
concat(new.linnanimi, ' rahvaarv: ', NEW.rahvaarv)
)
DELETE TRIGER

insert into logi(aeg, kasutaja, toiming, andmed)
VALUES(
NOW(),
USER(),
'linn on kustutatud',
OLD.linnanimi
)
UPDATE TRIGER

insert into logi(aeg, kasutaja, toiming, andmed)
select
NOW(),
USER(),
'linn on updated',
concat('vanad andmed: ', OLD.linnanimi,', ', OLD.rahvaarv,
' uued andmed: ', new.linnanimi,', ', new.rahvaarv)
from linnad l1
inner join linnad l2
on l1.linnID=l2.linnID
where NEW.linnID=l1.linnID
kontroll:

disable trigger linnalisamine ON linnad
–kasutaja nimega sekretarNastja parooliga kala ja sekretarNastja ei näe tabeli logi
–ja ei saa trigerid muuta/kustutada

