SQL Triggerid

SQL Server.

  1. Loome andmebaasi ja kolm tabelit. 1. Tabel – kuhu kasutaja sisestab andmeid (Linnad, maakonnad). 2. tabel – logi, kus trigger lisab jälgitud andmeid
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,
	kasutaja varchar(40)
);

create table maakonnad(
maakondId int primary key identity(1,1),
maakondNimi varchar(25) UNIQUe
);

alter table linnad add maakondId int;
select * from Linnad;
alter table linnad add constraint fk_maakond
foreign key (maakondId) references maakonnad(maakondId);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,
	kasutaja varchar(40)
);

create table maakonnad(
maakondId int primary key identity(1,1),
maakondNimi varchar(25) UNIQUe
);

alter table linnad add maakondId int;
select * from Linnad;
alter table linnad add constraint fk_maakond
foreign key (maakondId) references maakonnad(maakondId);

2. trigeri loomine.

INSERT TRIGGER, mis jälgib andmete lisamine tabelisse linnad.

--Triger mis jälgib kaks seostatud tabelit
create trigger linnaLisamine
ON Linnad
FOR insert
as 
insert into Logi(kuupaev, andmed, kasutaja)
select 
getdate(), 
CONCAT
(
	' | Lisatud linn: ', inserted.linnaNimi,
	' | rahvaarv: ', inserted.rahvaarv, 
	' | maakond: ', m.maakondNimi
),
SYSTEM_USER
from inserted inner join maakonnad m
on inserted.maakondId=m.maakondId;

DELETE triger, mis jälgib andmete kustutamine tabelist linnad.


create trigger linnaKustutamine
on Linnad
for delete
as 
insert into Logi(kuupaev, andmed, kasutaja)
select 
getdate(), 
CONCAT
(
	' | Kustutatud linn: ', deleted.linnaNimi,
	' | rahvaarv: ', deleted.rahvaarv, 
	' | maakond: ', m.maakondNimi
),
SYSTEM_USER
from deleted inner join maakonnad m
on deleted.maakondId = m.maakondId;

UPDATE Trigger, mis jälgib andmete uuendamine tabelis linnad.

create trigger linnaUuendamine
on Linnad
for update
as 
insert into Logi(kuupaev, andmed, kasutaja)
select 
getdate(), 
CONCAT
(
	' | Vana linna andmed: ', d.linnaNimi,
	' | rahvaarv: ', d.rahvaarv, 
	' | maakond: ', m1.maakondNimi,
	
	' | Uued linna andmed: ', i.linnaNimi,
	' | rahvaarv: ', i.rahvaarv, 
	' | maakond: ', m2.maakondNimi
),
SYSTEM_USER
from deleted d
inner join inserted i on d.linnID = i.linnID
inner join maakonnad m1 on d.maakondId = m1.maakondId
inner join maakonnad m2 on i.maakondId = m2.maakondId;