SQL Trigger

SQL triger on spetsiaalne andmebaasi objekt, mis käivitab automaatselt teatudn sündmus ()nt INSERT, UPDATE, DELETE) triggerid aitavad automatiseerida protsessid andmebassis

SQL Server.

  1. 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;