SQL triggerid on spetsiaalsed andmebaasi objektid, mis käivituvad automaatselt, kui toimub teatud sündmus (nt INSERT, UPDATE või DELETE). SQL Triggerite loomine aitab automatiseerida protsesse, tagada andmete terviklikkust ja rakendada äri loogikat otse andmebaasis.
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
Jälgib andmete sisestamine tabelis linnad ja teeb vastava kirje tabelis logi
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;

- SQL Triggeri Uuendamine (Muutmine)
- Leiame vajaliku tabeli andmebaasis
- Avame Triggers kausta
- Paremklõpsame soovitud triggeril
- Valime Modify (Muuda).


See avab dialoogiboksi, kus me saame teha vajalikud muudatused ja salvestada need.
USE [trigerTARgv24]
GO
/****** Object: Trigger [dbo].[linnaLisamine] Script Date: 19.03.2025 09:04:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[linnaLisamine]
ON [dbo].[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
CONCAT('linn: ', inserted.linnanimi, ', elanike arv: ', inserted.rahvaarv) --andmed
FROM inserted;
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;
Kontrollimine
--kontroll
DELETE FROM linnad
WHERE linnID=1;
SELECT * FROM linnad;
SELECT * FROM logi;

Trigger muudetud kirjeid jälgimiseks tabelis “linnad” – UPDATE
CREATE TRIGGER linnaUuendamine
ON linnad --tabelinimi, mis on vaja jälgida
FOR UPDATE
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(),
GETDATE(),
'on tehtud UPDATE käsk',
CONCAT('vanad andmed -linn: ', deleted.linnanimi,
', elanike arv: ', deleted.rahvaarv,
'uued andmed -linn: ', inserted.linnanimi,
', elanike arv: ', inserted.rahvaarv)
FROM deleted
INNER JOIN inserted
ON deleted.linnID=inserted.linnID;
Kontrollimine

XAMPP
Loome trigger’eid XAMPP-is (mis kasutab MySQL või MariaDB andmebaasi) järgides järgmisi samme. Näiteks teeme SQL triggeri, mis logib iga linnade lisamise või kustutamise andmed.
Create table linnad(
linnID int Auto_increment PRIMARY KEY,
linnanimi varchar(15),
rahvaarv int);
Create table logi(
id int Auto_increment PRIMARY KEY,
aeg DATETIME,
toiming varchar(100),
andmed TEXT,
kasutaja varchar(50)
)

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

Заполнить таблицу Linnad и проверяем таблицу Logi

Trigger muudetud kirjeid jälgimiseks tabelis “linnad” – UPDATE

Проверка:

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

Проверка:

Kombineerime INSERT ja DELETE triggerid
See SQL trigger linnaLisamineJaKustutamine salvestab logi iga kord, kui linnade tabelis lisatakse uus linn või kustutatakse olemasolev linn. Trigger käivitub pärast INSERT või DELETE toimingut ja salvestab logisse andmed.
Kood on tehtud selle allika baasil.
CREATE TRIGGER linnaLisamineJaKustutamine
ON linnad
AFTER INSERT, DELETE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(),
GETDATE(),
'INSERT',
CONCAT('linn: ', inserted.linnanimi,
', elanike arv: ', inserted.rahvaarv)
FROM inserted
UNION ALL
SELECT
SUSER_NAME(),
GETDATE(),
'DELETE',
CONCAT('linn: ', deleted.linnanimi,
', elanike arv: ', deleted.rahvaarv)
FROM deleted;
END
--Läbivaatus
INSERT INTO linnad(linnanimi, rahvaarv)
VALUES ('Tartu', 50000);
DELETE FROM
linnad
WHERE
linnID=2;
SELECT * FROM linnad;
SELECT * FROM logi;
--Diaktiveerib päästiku
DISABLE TRIGGER linnaLisamine
ON linnad