SQL TRIGERID

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