SQL triger on spetsiaalne andmebaasi objekt, mis käivitab automaatselt teatudn sündmus ()nt INSERT, UPDATE, DELETE) triggerid aitavad automatiseerida protsessid andmebassis
SQL Server.
- Loome andmebaasi ja kaks tabelit. 1. Tabel – kuhu kasutaja sisestab andmeid (Linnad). 2. tabel – logi, kus trigger lisab jälgitud andmeid
create database OlegBerez;
use OlegBerez;
--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
(
logID int primary key identity(1,1),
kuupaev datetime,
andmed text
);
2. trigeri loomine.
INSERT TRIGGER, 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;
--Kontrollime
insert into Linnad(linnaNimi, rahvaarv)
values ('Narva', 487932);
select * from Linnad;
select * from Logi;

DELETE triger, mis jälgib andmete kustutamine tabelist linnad.
-- 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, mis jälgib andmete uuendamine tabelis linnad.
--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 as d inner join inserted as i
on d.linnID=i.linnID;
--Kontrollime
select * from Linnad;
update Linnad set linnaNimi = 'Valga', rahvaarv = 7409832 where linnID = 2;
select * from Linnad;
select * from Logi;


XXAMP
trigger = päästik
Insert trigger

Delete trigger

Update trigger

Praktiline töö:


create trigger autoUuedamine
ON auto
FOR update
as
insert into Logi(kuupaev, andmed, kasutaja)
select
getdate(),
CONCAT
(
' | Vana auto: ', d.autoNr,
' | Auto omanik: ', d.omanik,
' | Auto mark: ', d.mark,
' | Auto aasta: ', d.aasta,
' | Id: ', d.autoID,
' | Uus auto: ', i.autoNr,
' | Auto omanik: ', i.omanik,
' | Auto mark: ', i.mark,
' | Auto aasta: ', i.aasta,
' | Id: ', i.autoID
),
system_user
from deleted as d inner join inserted as i
on d.autoID = i.autoID;
