SQL TRIGER

SQL triger on spetsiaalne andmebaasi objekt, mis käivitab automaatselt teatud sündmus (nt INSERT, UPDATE, DELETE). Trigerid aitavad automatiseerida protsessid andmebaasis.

SQL Server.

  1. Loome andmebaasi ja kaks tabelit. 1. tabel – kuhu kasutaja sisestab andmeid (linnad) ja 2. tabel – logi, kus triger lisab jälgitud andmeid.
--SQL Triger
--Loome andmebaasi
CREATE DATABASE TrigeridSamrjakov;
USE TrigeridSamrjakov;

--Loome kaks tabelit
--1. Tabel - kuhu kasutaja sisestab andmeid (linnad)
CREATE TABLE Linnad(
LinnID INT PRIMARY KEY IDENTITY(1,1),
LinnaNimi VARCHAR(50) UNIQUE,
RahvaArv INT NOT NULL);

SELECT * FROM Linnad;

--2. Tabel - logi, kus triger lisab jälgitud andmeid.
CREATE TABLE Logi(
ID INT PRIMARY KEY IDENTITY(1,1),
Kuupaev DATETIME,
Andmed TEXT);

SELECT * FROM Logi;

2. Trigeri loomine

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

--Trigeri loomine
--INSERT TRIGGER, mis jälgib andmete lisamine tabelisse linnad.
CREATE TRIGGER LinnaLisamine
ON Linnad
FOR INSERT
AS
INSERT INTO Logi(Kuupaev, Andmed)
SELECT 
GETDATE(), inserted.LinnaNimi
FROM inserted;

--Kontrollimiseks tuleb lisada uus linn tabelisse linnad
INSERT INTO Linnad(LinnaNimi, RahvaArv)
VALUES ('Tallinn', 600000);

SELECT * FROM Linnad;
SELECT * FROM Logi;

--Kustutame triger
DROP TRIGGER LinnaLisamine;

--Täiendatud triger
CREATE TRIGGER LinnaLisamine
ON Linnad
FOR INSERT
AS
INSERT INTO Logi(Kuupaev, Andmed)
SELECT 
GETDATE(),
CONCAT('Lisatud linn: ',inserted.LinnaNimi,
' | Rahvaarv: ', inserted.RahvaArv, ' | ID: ', inserted.LinnID)
FROM inserted;

--Kontrollimiseks tuleb lisada uus linn tabelisse linnad
INSERT INTO Linnad(LinnaNimi, RahvaArv)
VALUES ('Tartu', 96000);

INSERT INTO Linnad(LinnaNimi, RahvaArv)
VALUES ('Kuressaare', 12500);

DELETE TRIGGER

--DELETE TRIGGER
CREATE TRIGGER LinnaKustutamine
ON Linnad
FOR DELETE
AS
INSERT INTO Logi(Kuupaev, Andmed)
SELECT
GETDATE(),
CONCAT('Kustutatud linn: ', deleted.LinnaNimi,
' | Rahvaarv: ', deleted.RahvaArv, ' | ID: ', deleted.LinnID)
FROM deleted;

DELETE FROM Linnad WHERE LinnID = 1;
SELECT * FROM Linnad;
SELECT * FROM Logi;

UPDATE TRIGGER

--UPDATE TRIGGER
CREATE TRIGGER LinnaUuendamine
ON Linnad
FOR UPDATE
AS INSERT INTO Logi(Kuupaev, Andmed)
SELECT
GETDATE(),
CONCAT('Vana linna andmed: ', d.LinnaNimi,
' | Rahvaarv: ', d.RahvaArv, ' | ID: ', d.LinnID,
' | Uued linna andmed: ', I.LinnaNimi,
' | Rahvaarv: ', I.RahvaArv, ' | ID: ', I.LinnID)
FROM deleted D INNER JOIN inserted I
ON D.LinnID = I.LinnID;

--Kontrollimiseks uuendame linna andmed
UPDATE Linnad SET LinnaNimi = 'Tallinn', RahvaArv = 600000
WHERE LinnID = 3;

SELECT * FROM Linnad;
SELECT * FROM Logi;
--Lisame KasutajaNimi logi tabelisse
ALTER TABLE Logi ADD KasutajaNimi varchar(40);
SELECT * FROM Logi;

INSERT INTO Linnad(LinnaNimi, RahvaArv)
VALUES ('Narva', 52500);

DELETE FROM Linnad WHERE LinnID = 3;

UPDATE Linnad SET LinnaNimi = 'Viljandi', RahvaArv = 16800
WHERE LinnId = 2;

SELECT * FROM Linnad;
SELECT * FROM Logi;