Trigger –
Näide:
CREATE DATABASE NikifovTrig
USE NikifovTrig
Create table linnad(
linnID int IDENTITY(1,1) PRIMARY KEY,
linnanimi varchar(15),
rahvaarv int);
--tabeli logi näitab adminile tabel linnad
--kasutakse, tabel logi täitab triger
Create table logi(
id int IDENTITY(1,1) PRIMARY KEY,
aeg DATETIME,
toiming varchar(100),
andmed varchar(200),
kasutaja varchar(100)
)
--INSERT TRIGER, mis jälgib tabeli linnad täitmine
CREATE TRIGGER linnaLisamine
ON linnad
FOR INSERT
AS
InSERT INTO logi(aeg, kasutaja, toiming,andmed)
SELECT GETDATE(), SYSTEM_USER, 'linn on lisatud', inserted.linnanimi FROM inserted;
--Trigeri tegevuse kontroll
INSERT INTO linnad(linnanimi, rahvaarv) VALUES ('Tallinn', 123456789)
CREATE TRIGGER linnaKasutamine
ON linnad
FOR DELETE
AS
InSERT INTO logi(aeg, kasutaja, toiming, andmed)
SELECT GETDATE(), SYSTEM_USER, 'linn on kasutatud', deleted.linnanimi FROM deleted;
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, kasutaja, toiming, andmed)
SELECT GETDATE(), SYSTEM_USER, 'linn on uuendatud', CONCAT('vanad andmed:', deleted.linnanimi, ' ,', deleted.rahvaarv, 'uuend andmed:', inserted.linnanimi, ' ,', inserted.rahvaarv ) FROM deleted
INNER JOIN inserted ON deleted.linnID = inserted.linnID;
--Kontroll
UPDATE linnad SET rahvaarv = 650001
WHERE linnID = 3
SELECT * FROM linnad
SELECT * FROM logi
DENY SELECT, INSERT, UPDATE, DELETE ON logi TO SekNikita;
GRANT SELECT, INSERT, UPDATE, DELETE ON linnad to SekNikita
Trigeri loomine:
CREATE TRIGGER Name
Näide loomine triger (INSERT):
CREATE TRIGGER linnaLisamine
ON linnad
FOR INSERT
AS
InSERT INTO logi(aeg, kasutaja, toiming,andmed)
SELECT GETDATE(), SYSTEM_USER, 'linn on lisatud', inserted.linnanimi FROM inserted;
Näide kasutamine triger (DELETE)
CREATE TRIGGER linnaKasutamine
ON linnad
FOR DELETE
AS
InSERT INTO logi(aeg, kasutaja, toiming, andmed)
SELECT GETDATE(), SYSTEM_USER, 'linn on kasutatud', deleted.linnanimi FROM deleted;
Näide uuendamine triger (UPDATE)
CREATE TRIGGER linnaUuendamine
ON linnad
FOR UPDATE
AS
InSERT INTO logi(aeg, kasutaja, toiming, andmed)
SELECT GETDATE(), SYSTEM_USER, 'linn on uuendatud', CONCAT('vanad andmed:', deleted.linnanimi, ' ,', deleted.rahvaarv, 'uuend andmed:', inserted.linnanimi, ' ,', inserted.rahvaarv ) FROM deleted
INNER JOIN inserted ON deleted.linnID = inserted.linnID;
Triger välja/lülitama
DISABLE TRIGGER TriggerName ON linnad
ENABLE TRIGGER TriggerName ON linnad

