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 kaks tabelit. 1. tabel kuhu kasutaja sisestab andmeid (linnad). 2. tabel – logi, kus triger lisab jälgitud andmeid.
create database trigerTimoha
use trigerTimoha

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 jalgib andmete lisamine tabelisse linnad.

Create TRIGGER linnaLisamine
on linnad
for insert
As
insert into logi(kuupaev, andmed)
Select
getdate(), inserted.linnanimi
from inserted;
--kontrllimiseks tuleb lisada uus linn tabelisse
insert into linnad (linnanimi, rahvaarv)
values('Narva', 50000);
Select * from linnad;
Select * from logi;

--kustutame triger
drop trigger linnaLisamine;

Create TRIGGER linnaLisamine
on linnad
for insert
As
insert into logi(kuupaev, andmed)
Select
getdate(),
CONCAT ('lisarud linn: ', inserted.linnanimi,
' | rahvaarv: ', inserted.rahvaarv, ' id: ', inserted.linnId)
from inserted;
--delete trigger
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;
CREATE TRIGGER linnaUuendamine
on linnad
For update
as
insert into logi(kuupaev, andmed)
select
GETDATE(),
CONCAT (' vana linna andmed: ', d.linnanimi,
' | ', d.rahvaarv, ' | id: ', d.linnId,
' vana linna andmed: ', i.linnanimi,
' | ', i.rahvaarv, ' | id: ', i.linnId)
from deleted  d inner join inserted i
on d.linnId=i.linnId
--kontrollimiseks uuendame linna andmed
select * from linnad
UPDATE linnad Set linnanimi = 'Tapa uus', rahvaarv= 25
Where linnId=2;
select * from linnad;
select * from logi;

--lisame kasutajanimi logi tabelisse

Alter table logi add kasutaja varchar(40);
--INSERT, DELETE Trigger
Create TRIGGER linnaLisamineKustutamine
on linnad
for insert, DELETE
As
begin
SET NOCOUNT ON;
insert into logi(kuupaev, andmed, kasutaja)
Select
getdate(),
CONCAT ('lisarud 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;

DiSABle TRIGGER linnaLisamine on linnad;
DISABLE TRIGGER linnaLkustutamine ON linnad;

insert into linnad (linnanimi, rahvaarv)
values('Paldiski', 50000);

Delete from linnad Where linnId=5
select * from linnad
Select * from logi