Portfoolio

SQL TRIGGER

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). 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);
  1. 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