SQL TRIGERID

Kokkuvõte

SQL-triggerid on andmebaasihalduse võimas tööriist, mis võimaldab automatiseerida andmetöötlust ja säilitada andmete kvaliteeti ning järjepidevust. Need on hädavajalikud keerukamate andmebaasirakenduste ja süsteemide arendamisel, kus andmete haldamine ja jälgimine on kriitilise tähtsusega.

SQL-triggerid (või päästikud) on andmebaasi objektid, mis võimaldavad automaatselt käivitada teatud toiminguid, kui andmebaasitabelis toimub kindel sündmus. Need on eriti kasulikud andmete terviklikkuse tagamiseks ja automatiseeritud tegevuste rakendamiseks.

SQL Triggerite Põhiomadused

  1. Automaatne käivitamine: Triggerid aktiveeruvad automaatselt, kui toimub teatud sündmus, näiteks andmete sisestamine, muutmine või kustutamine.
  2. Tüüpide määratlemine: Triggerid võivad olla erinevat tüüpi sõltuvalt sündmustest, mis neid käivitavad. Näiteks BEFORE-trigger käivitub enne andmeoperatsiooni teostamist, samas kui AFTER-trigger käivitub pärast andmeoperatsiooni teostamist.
  3. Eesmärk ja kasutamine: Triggerid on kasulikud mitmetes olukordades, näiteks logimise ja jälgimise süsteemide loomisel, andmete valideerimisel enne nende salvestamist ning automatiseeritud teavituste saatmisel.
  4. Andmebaasi terviklikkus: Triggerid aitavad säilitada andmete terviklikkust ja järjepidevust, rakendades äriloogikat, mis ei ole alati lihtsalt andmebaasitabelite struktuuri kaudu võimalik.
  5. Tsentraliseeritud äriloogika: Triggerid võimaldavad äriloogika tsentraliseerimist, mis tähendab, et teatud reeglid ja protseduurid saab määratleda ühes kohas, mitte erinevates rakendustes või teenustes.

Näide: Triggeri loomine ja kasutamine

Andmebaasi loomine ja tabeli määratlemine

CREATE DATABASE trigerTARpv23;
USE trigerTARpv23;

-- Tabel toode
CREATE TABLE toode (
toodeId INT PRIMARY KEY AUTO_INCREMENT,
toodeNimi VARCHAR(50),
hind INT
);

-- Logitabel
CREATE TABLE logi (
id INT PRIMARY KEY AUTO_INCREMENT,
kasutaja VARCHAR(100),
kuupaev DATETIME,
sisestatudAndmed TEXT
);

INSERT-trigger

CREATE TRIGGER toodeLisamine
ON toode
FOR INSERT
AS
INSERT INTO logi(kasutaja, kuupaev, sisestatudAndmed)
SELECT
USER,
GETDATE(),
CONCAT('Lisatud andmed: ', inserted.toodeNimi, ', ', inserted.hind)
FROM inserted;

DELETE-trigger

CREATE TRIGGER toodeKustutamine
ON toode
FOR DELETE
AS
INSERT INTO logi(kasutaja, kuupaev, sisestatudAndmed)
SELECT
USER,
GETDATE(),
CONCAT('Kustutatud andmed: ', deleted.toodeNimi, ', ', deleted.hind)
FROM deleted;

UPDATE-trigger

CREATE TRIGGER toodeUuendamine
ON toode
FOR UPDATE
AS
INSERT INTO logi(kasutaja, kuupaev, sisestatudAndmed)
SELECT
USER,
GETDATE(),
CONCAT('Vanad andmed: ', deleted.toodeNimi, ', ', deleted.hind,
' -> Uued andmed: ', inserted.toodeNimi, ', ', inserted.hind)
FROM deleted
INNER JOIN inserted ON deleted.toodeId = inserted.toodeId;

TV_Shop Ülesanne

Andmebaasi ja tabelite loomine

CREATE DATABASE TV_Shop;
USE TV_Shop;

-- Tabel TV_baas
CREATE TABLE TV_baas (
TV_ID INT PRIMARY KEY AUTO_INCREMENT,
TV_mudel VARCHAR(100) NOT NULL,
TV_suurus INT NOT NULL
);

-- Logitabel
CREATE TABLE logi (
logiID INT PRIMARY KEY AUTO_INCREMENT,
kasutaja VARCHAR(100),
kuupaev DATETIME DEFAULT CURRENT_TIMESTAMP,
sisestatudAndmed TEXT
);

INSERT-trigger

CREATE TRIGGER InsertTV
ON TV_baas
FOR INSERT
AS
INSERT INTO logi(kasutaja, kuupaev, sisestatudAndmed)
SELECT
USER,
GETDATE(),
CONCAT('Lisatud andmed: TV_mudel=', inserted.TV_mudel, ', TV_suurus=', inserted.TV_suurus)
FROM inserted;

DELETE-trigger

CREATE TRIGGER DeleteTV
ON TV_baas
FOR DELETE
AS
INSERT INTO logi(kasutaja, kuupaev, sisestatudAndmed)
SELECT
USER,
GETDATE(),
CONCAT('Kustutatud andmed: TV_mudel=', deleted.TV_mudel, ', TV_suurus=', deleted.TV_suurus)
FROM deleted;

UPDATE-trigger

CREATE TRIGGER DeleteTV
ON TV_baas
FOR DELETE
AS
INSERT INTO logi(kasutaja, kuupaev, sisestatudAndmed)
SELECT
USER,
GETDATE(),
CONCAT('Kustutatud andmed: TV_mudel=', deleted.TV_mudel, ', TV_suurus=', deleted.TV_suurus)
FROM deleted;

Andmete lisamine, uuendamine ja kustutamine

INSERT INTO TV_baas (TV_mudel, TV_suurus)
VALUES ('za1', 120), ('za2', 140), ('za3', 250);

UPDATE TV_baas SET TV_mudel = 'za6' WHERE TV_ID = 2;

DELETE FROM TV_baas WHERE TV_mudel = 'za1';