SQL Trigerid

Triger (päästik, trigger) – protsess, mille abil tema sisse kirjutatud tegevused automaatselt käivitatakse.

Andmebaasi ja kahe tabeli loomine linnad ja logi

Create database PosvystakTrigerid;
Use PosvystakTrigerid;

Create table linnad(
linnID int identity(1,1) PRIMARY KEY,
linnanimi varchar(15),
rahvaarv int);

--Tabel logi näitab admiline kuidas tabel linnad kasutatakse,
--tabel logi täitab trigger
Create table logi(
id int identity(1,1) PRIMARY KEY,
aeg DATETIME,
toiming  varchar(100),
andmed varchar(200),
kasutaja varchar(100)
)
Create database PosvystakTrigerid;
Use PosvystakTrigerid;

Create table linnad(
linnID int identity(1,1) PRIMARY KEY,
linnanimi varchar(15),
rahvaarv int);

--Tabel logi näitab admiline kuidas tabel linnad kasutatakse,
--tabel logi täitab trigger
Create table logi(
id int identity(1,1) PRIMARY KEY,
aeg DATETIME,
toiming  varchar(100),
andmed varchar(200),
kasutaja varchar(100)
)

--INSERT TRIGGER 
CREATE TRIGGER LinnaLIsamine
on linnad
for insert
as
insert into logi(aeg, toiming, andmed, kasutaja)
select 
getdate(),
system_user,
'linn on lisatud',
inserted.linnanimi
from inserted

--trigeri tegevuse kontroll
Insert into linnad(linnanimi, rahvaarv)
values ('Tallinn', 650000);
select * from linnad;
select * from logi;

Go
Alter TRIGGER [dbo].[LinnaLIsamine]
on [dbo].[linnad]
for insert
as
insert into logi(aeg, toiming, andmed, kasutaja)
select 
getdate(),
system_user,
'linn on lisatud',
inserted.linnanimi
from inserted

--delete trigger 
CREATE TRIGGER LinnaKustutamine
on linnad
for delete
as
insert into logi(aeg, toiming, andmed, kasutaja)
select 
getdate(),
system_user,
'linn on kustutatud',
deleted.linnanimi
from deleted
--kontroll
delete from linnad where linnID=2;
select * from linnad;
select * from logi;

--Update triger
CREATE TRIGGER LinnaUuendamine
on linnad
for update
as
insert into logi(aeg, toiming, andmed, kasutaja)
select 
getdate(),
system_user,
'linn on uuendatud',
concat ('vana 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=245364
where linnID=1;
select * from linnad;
select * from logi;

XAMPP