SQL triger on spetsiaalne andmebaasi objekt, mis käivitab automaatselt teatud sündmus (nt INSERT, UPDATE, DELETE). Trigerid aitavad automatiseerida protsessid andmebaasis.
SQL Server.
- loome andmebaasi ja kaks tabelit. 1. tabel – kuhu kasutaja sisestab andmeid (linnad). 2. tabel – logi, kus triger lisab jälgitud andmeid.
create database trigerKlimuk;
use trigerKlimuk;
--tabel linnad
CREATE TABLE linnad(
linnId int primary key identity(1,1),
linnanimi varchar(50) unique,
rahvaarv int not null);
--tabel logi
CREATE TABLE logi(
Id int primary key identity(1,1),
kuupaev datetime,
andmed TEXT);
- trigeri loomine.
INSERT TRIGGER, mis jälgib andmete lisamine tabelisse linnad.
--Insert Triger
CREATE TRIGGER linnaLisamine
ON linnad
FOR INSERT
AS
INSERT INTO logi(kuupaev, andmed)
SELECT
getdate(), inserted.linnanimi
FROM inserted;
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 ('Narva', 60000);
SELECT * FROM linnad;
SELECT * FROM logi;
--kustutame triger
drop trigger linnaLisamine;

delete from linnad WHERE linnId=1;
SELECT * FROM linnad;
SELECT * FROM logi;

-- UPDATE TRIGGER
CREATE TRIGGER linnaUuendamine
ON linnad
FOR UPDATE
AS
INSERT INTO logi(kuupaev, andmed)
SELECT
getdate(),
CONCAT('vana linna andmed: ', d.linnanimi,
' | ', d.rahvaarv, ' | id: ', d.linnId,
' uued linna andmed: ', i.linnanimi,
' | ', i.rahvaarv, ' | id: ', i.linnId)
FROM deleted d INNER JOIN inserted i
ON d.linnId=i.linnId;
--kontrollimiseks uuendame linna andmed
SELECT * FROM linnad;
UPDATE linnad SET linnanimi='Tapa uus', rahvaarv=25
WHERE linnId=2;
SELECT * FROM linnad;
select * from logi;

--linnaLisamine modify
USE [trigerKlimuk]
GO
/****** Object: Trigger [dbo].[linnaLisamine] Script Date: 13.04.2026 09:43:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[linnaLisamine]
ON [dbo].[linnad]
FOR INSERT
AS
INSERT INTO logi(kuupaev, andmed, kasutaja)
SELECT
getdate(),
CONCAT('lisatud linn: ', inserted.linnanimi,
' | rahvaarv: ', inserted.rahvaarv, ' | id: ', inserted.linnId),
SYSTEM_USER
FROM inserted;

--linnakustutamine modify
USE [trigerKlimuk]
GO
/****** Object: Trigger [dbo].[linnaKustutamine] Script Date: 13.04.2026 09:46:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- DELETE TRIGGER
ALTER TRIGGER [dbo].[linnaKustutamine]
ON [dbo].[linnad]
FOR DELETE
AS
INSERT INTO logi(kuupaev, andmed, kasutaja)
SELECT
getdate(),
CONCAT('kustutatud linn: ', deleted.linnanimi,
' | rahvaarv: ', deleted.rahvaarv, ' | id: ', deleted.linnId),
SYSTEM_USER
FROM deleted;

--linnaUuendamine modify
SET QUOTED_IDENTIFIER ON
GO
-- UPDATE TRIGGER
ALTER TRIGGER [dbo].[linnaUuendamine]
ON [dbo].[linnad]
FOR UPDATE
AS
INSERT INTO logi(kuupaev, andmed, kasutaja)
SELECT
getdate(),
CONCAT('vana linna andmed: ', d.linnanimi,
' | ', d.rahvaarv, ' | id: ', d.linnId,
' uued linna andmed: ', i.linnanimi,
' | ', i.rahvaarv, ' | id: ', i.linnId),
SYSTEM_USER
FROM deleted d INNER JOIN inserted i
ON d.linnId=i.linnId;

--deaktiveerime linnalisamine ja linnaKustutamine
DISABLE TRIGGER linnaLisamine ON linnad;
DISABLE TRIGGER linnaKustutamine ON linnad;


дополнительная таблица автомобиль + 3 тригери
CREATE TRIGGER autoLisamine
ON auto
FOR INSERT
AS
INSERT INTO logi(kuupaev, andmed)
SELECT
getdate(),
CONCAT('lisatud auto: ', inserted.mark,
' | omanik: ', inserted.omanik, ' | aasta: ', inserted.aasta, ' | id: ', inserted.autoId)
FROM inserted;
--auto1
INSERT INTO auto (autoNum, omanik, mark, aasta)
VALUES ('123ABC', 'Ivan', 'BMW', 2020);
SELECT * FROM auto;
SELECT * FROM logi;
--auto2
INSERT INTO auto (autoNum, omanik, mark, aasta)
VALUES ('456DEF', 'Lev', 'Toyota', 2018);
SELECT * FROM auto;
SELECT * FROM logi;

CREATE TRIGGER autoKustutamine
ON auto
FOR DELETE
AS
INSERT INTO logi(kuupaev, andmed)
SELECT
getdate(),
CONCAT('kustutatud auto: ', deleted.mark,
' | omanik: ', deleted.omanik, ' | aasta: ', deleted.aasta, ' | id: ', deleted.autoId)
FROM deleted;
DELETE FROM auto
WHERE autoId=1;
SELECT * FROM auto;
SELECT * FROM logi;

CREATE TRIGGER autoUuendamine
ON auto
FOR UPDATE
AS
INSERT INTO logi(kuupaev, andmed)
SELECT
getdate(),
CONCAT('vana auto: ', d.mark,
' | ', d.omanik, ' | ', d.aasta, ' | id: ', d.autoId,
' uus auto: ', i.mark,
' | ', i.omanik, ' | ', i.aasta, ' | id: ', i.autoId)
FROM deleted d INNER JOIN inserted i
ON d.autoId=i.autoId;
UPDATE auto
SET mark='Audi', aasta=2022
WHERE autoId=2;
SELECT * FROM auto;
SELECT * FROM logi;

Koik lisatud triggerid:

XAMPP/localhost




