Triger(trigger) — protsess, mille abil tema sisse kirjutatud tegevused automaatseld käivitakse.
xampp — päästik
create database TrigerTARpv23 use TrigerTARpv23 --loome tabeli create table Toode( toodeId int primary key identity(1,1), toodeNimi varchar(50), hind int, ); select * from Toode; --loome tabeli mis täidab triger CREATE table logi( id int primary key identity(1,1), kasutaja varchar(100), kuupaev dateTime, sisestatudAndmed text, ); select * from logi
INSERT TRIGGER — triger, mis jälgib andmete lisamist tabelisse ja teeb vastava kirje tabelis logi.
CREATE TRIGGER toodeLisamine ON toode -- table being monitored FOR insert AS BEGIN INSERT INTO logi (kasutaja, kuupaev, sisestatudAndmed) SELECT USER, GETDATE(), CONCAT('Lisatud andmed: ', inserted.toodeNimi, ', ' , inserted.hind) FROM inserted; END; --kontroll --kontrollimiseks lisame toode insert into toode(toodeNimi, hind) Values('Ilus pirn', 30) select * from toode; select * from logi;
XAMPP
INSERT INTO logi (kasutaja, kuupaev, sisestatudAndmed) VALUES USER(), NOW(), CONCAT('Lisatud andmed: ', NEW.toodeNimi, ', ' ,NEW.hind) END;

kontroll


DELETE TRIGGER — trigger, mis jälgib andmete kustutamist tabelisse ja teeb vastava kirje tabelis logi.
CREATE TRIGGER toodeKustutamine ON toode -- table being monitored FOR delete AS BEGIN INSERT INTO logi (kasutaja, kuupaev, sisestatudAndmed) SELECT USER, GETDATE(), CONCAT('Kustutatud andmed: ', deleted.toodeNimi, ', ', deleted.hind) FROM deleted; END; --kontrollimiseks kustutame toode tabelis toode delete from toode where toodeId=1; select*from toode; select*from logi;
XAMPP

INSERT INTO logi (kasutaja, kuupaev, sisestatudAndmed) VALUES( USER(), NOW(), CONCAT('Kustutatud andmed: ', OLD.toodeNimi, ', ' ,OLD.hind))
kontroll


TRIGGER UPDATE — trigger, mis jälgib andmete uuendamist tabelisse ja teeb vastava kirje tabelis logi.
CREATE TRIGGER toodeUpdate ON toode FOR delete AS BEGIN 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 END; --kontrollimiseks uuendame toode select * from toode; update toode set toodeNimi='orange melon' where toodeId=2; select * from toode; select * from logi;
XAMPP

INSERT INTO logi (kasutaja, kuupaev, sisestatudAndmed) VALUES( USER(), NOW(), CONCAT('Kustutatud andmed: ', OLD.toodeNimi, ', ' ,OLD.hind, 'Uued andmed',', ', NEW.toodeNimi,', ',NEW.hind))
Kontroll


SQL Server CREATE TRIGGER
CREATE TABLE product_audits ( change_id INT IDENTITY(1,1) PRIMARY KEY, product_id INT NOT NULL, product_name VARCHAR(255) NOT NULL, brand_id INT NOT NULL, category_id INT NOT NULL, model_year SMALLINT NOT NULL, list_price DECIMAL(10,2) NOT NULL, updated_at DATETIME NOT NULL, operation CHAR(3) NOT NULL, CHECK(operation IN ('INS', 'DEL')) ); CREATE TABLE products ( product_id INT PRIMARY KEY IDENTITY(1,1), product_name VARCHAR(100) NOT NULL, brand_id INT NOT NULL, category_id INT NOT NULL, model_year SMALLINT, list_price DECIMAL(10,2) );
Creating an after DML trigger
CREATE TRIGGER trg_product_audit ON products AFTER INSERT, DELETE AS BEGIN SET NOCOUNT ON; INSERT INTO product_audits ( product_id, product_name, brand_id, category_id, model_year, list_price, updated_at, operation ) SELECT i.product_id, i.product_name, i.brand_id, i.category_id, i.model_year, i.list_price, GETDATE(), 'INS' FROM inserted i UNION ALL SELECT d.product_id, d.product_name, d.brand_id, d.category_id, d.model_year, d.list_price, GETDATE(), 'DEL' FROM deleted d; END;
Testing the trigger
INSERT INTO products ( product_name, brand_id, category_id, model_year, list_price ) VALUES ( 'Test product', 1, 1, 2018, 599.00 ); SELECT * FROM product_audits;
Kontroll

DELETE FROM products WHERE product_id = 322;
