SQL TRIGGER

SQL triger on spetsiaalne andmebaasi objekt, mis käivitab automaatselt teatud sündmus (nt INSERT, UPDATE, DELETE). Trigerid aitavad automatiseerida protsessid andmebaasis.

SQL Server.

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