Veronika Portfoolio

SQL. Триггеры

Процесс, при помощи которого записанные в него действия будут выполнятся автоматически. Пример, При помощи триггера автоматически заполняться таблица logi, в которой будет фиксироваться в какое время и какое действие выполнялось в таблице linnad.

SQL Server

Loome andmebaasi ja kaks tabelit

 

Create database trigerTARgv24;
USE trigerTARgv24;
Create table linnad(
linnID int PRIMARY KEY IDENTITY (1,1),
linnanimi varchar(15) NOT NULL,
rahvaarv int);

Create table logi(
id int PRIMARY KEY IDENTITY (1,1),
aeg DATETIME,
toiming varchar(100),
andmed TEXT
)

Trigger lisatud kirjeid jälgimiseks tabelis “linnad” – INSERT

CREATE TRIGGER linnaLisamine
ON linnad --tabelinimi, mis on vaja jälgida
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed)
SELECT
GETDATE(),  --aeg
'on tehtud INSERT käsk'--toiming
inserted.linnanimi  --andmed
FROM inserted;

Trigeri tegevuse kontroll

INSERT INTO linnad(linnanimi, rahvaarv)
VALUES (‘Tallinn’, 600000);
SELECT * FROM linnad;
SELECT * FROM logi;

 

See avab dialoogiboksi, kus me saame teha vajalikud muudatused ja salvestada need.

Tõsta esile ALTER TRIGGER –> Execute –> Käsk täidetud

Andmete sisestamine tabelisse “logi” on muutunud.

Tools –> Options –> Designers –> Table and Database Designers –> Eemaldada linnuke valikust “Prevent saving changes that require table re-creation”

Lisame välja “kasutaja” tabelisse ja salvestame.

Muudame triggeri.
SUSER_NAME on SQL funktsioon, mis tagastab hetkel sisse logitud kasutaja nime.

ALTER TRIGGER [dbo].[linnaLisamine]
ON [dbo].[linnad] –tabelinimi, mis on vaja jälgida
FOR INSERT
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(), –USER
GETDATE(), –aeg
‘on tehtud INSERT käsk’, –toiming
CONCAT(‘linn: ‘, inserted.linnanimi, ‘, elanike arv: ‘, inserted.rahvaarv) –andmed
FROM inserted;

Kontrollime: Lisab kasutaja, kes andmed tabelisse sisestas.

Trigger eemaldatud kirjeid jälgimiseks tabelis “linnad” – DELETE

CREATE TRIGGER linnaKustutamine
ON linnad –tabelinimi, mis on vaja jälgida
FOR DELETE
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(), –USER
GETDATE(), –aeg
‘on tehtud DELETE käsk’, –toiming
CONCAT(‘linn: ‘, deleted.linnanimi, ‘, elanike arv: ‘, deleted.rahvaarv) –andmed
FROM deleted;