SQL Triggerid

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