Triger(Trigger) – protsess, mille abil tema sisse kirjutatud tegevused automaatselt käivitatakse
create database trigerTARpv23;
use trigerTARpv23;
--loome tabeli toode
create table toode(
toodeID int primary key identity(1,1),
toodeNimi varchar(50),
hind int);
--loome tabeli, mis täitab triger
create table logi(
id int primary key identity(1,1),
kasutaja varchar(100),
kuupaev datetime,
sisestatudAndmed text);
INSERT TRIGER – triger, mis jälgib (отслеживает) andmete lisamine tabelisse ja teeb vastava kirje tabelis logi
create trigger toodeLisamine
on toode --tabel, mis jälgitakse
for insert
as
insert into logi(kasutaja, kuupaev,sisestatudAndmed)
select
user,
getdate(),
CONCAT('lisatud andmed ', inserted.toodeNimi, ', ',inserted.hind)
from inserted
--kotroll
--kontrolimiseks lisame toode
insert into toode(toodeNimi, hind)
values ('ilus pirn', 30);
select * from toode;
select * from logi;

-- delete trigger
create trigger toodeKustutamine
on toode --tabel, mis jälgitakse
for delete
as
insert into logi(kasutaja, kuupaev,sisestatudAndmed)
select
user,
getdate(),
CONCAT('Kustutatud andmed: ', deleted.toodeNimi, ', ',deleted.hind)
from deleted
--kontroll
delete from toode
where toodeID = 1;
select * from toode;
select * from logi;

--update trigger
create trigger toodeUuendamine
on toode --tabel, mis jälgitakse
for update
as
insert into logi(kasutaja, kuupaev,sisestatudAndmed)
select
user,
getdate(),
CONCAT('Vana andmed: ', deleted.toodeNimi, ', ',deleted.hind, '. Uued admed: ', inserted.toodeNimi, ', ', inserted.hind)
from deleted inner join inserted
on deleted.toodeID=inserted.toodeID
--kontroll
select * from toode;
update toode set toodeNimi='orange melon'
where toodeID=2;
select * from toode;
select * from logi;

Products tabel
--tabel products loomine
create table products(
product_id int primary key identity(1,1),
product_name VARCHAR(255) NOT NULL,
brand_id INT NOT NULL,
category_id INT NOT NULL,
model_year SMALLINT NOT NULL,
list_price DEC(10,2) NOT NULL
);
--tabel product_audits(logi) loomine
CREATE TABLE product_audits(
change_id INT IDENTITY 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 DEC(10,2) NOT NULL,
updated_at DATETIME NOT NULL,
operation CHAR(3) NOT NULL,
CHECK(operation = 'INS' or operation='DEL')
);
--triggeri loomine INSERT ja DELETE koos
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,
product_name,
brand_id,
category_id,
model_year,
i.list_price,
GETDATE(),
'INS'
FROM
inserted i
UNION ALL
SELECT
d.product_id,
product_name,
brand_id,
category_id,
model_year,
d.list_price,
GETDATE(),
'DEL'
FROM
deleted d;
END
--andmete lisamine
INSERT INTO products(
product_name,
brand_id,
category_id,
model_year,
list_price
)
VALUES (
'Test product',
1,
1,
2018,
599
);
--andmete kustutamine
SELECT
*
FROM
product_audits;
DELETE FROM
products
WHERE
product_id = 1;

Trigger XAMPP
päästik – trigger XAMPPis
Triggeri loomine
Lisamine
insert into logi(kasutaja, kuupaev,sisestatudAndmed)
VALUES(
user(),
NOW(),
CONCAT('lisatud andmed ', NEW.toodeNimi, ', ',NEW.hind))

Kustutamine
insert into logi(kasutaja, kuupaev,sisestatudAndmed)
VALUES(
user(),
NOW(),
CONCAT('kustutatud andmed ', OLD.toodeNimi, ', ',OLD.hind))

Uuendamine
insert into logi(kasutaja, kuupaev,sisestatudAndmed)
VALUES(
user(),
now(),
CONCAT('Vanad andmed: ', OLD.toodeNimi, ', ',OLD.hind, '. Uued admed: ', NEW.toodeNimi, ', ', NEW.hind))

Logi kontroll
