Triger(est) / Trigger (en) – protsess, mille abil tema sisse kirjutatud tegevused automaatselt käivitatakse.
--loome tabeli toode Create table toode ( toodeID int primary key identity(1,1), toodeNimi varchar(50), hind int); --loome tabeli, mis täida 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 tabelise 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
--kontrollime --kontrollimeseks lisame toode insert into toode(toodeNimi, hind) values('Ilus pirn', 30) select * from toode; select * from logi

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 --kontrollimiseks kustutame toode tabelis toode delete from toode where toodeID=1; select * from toode select * from logi

create trigger toodeUuendamine ON toode --tabel, mis jälgitakse 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 -- kontollimiseks uuendame toode select * from toode update toode set toodeNimi = 'Melon' where toodeID = 2; select * from toode select * from logi

Ühes trigeris saate kasutada ka mitut toimingut korraga, kasutades nuppu After
Näiteks:
AFTER INSERT, DELETE
Trigeris põhiosas saate seada SET NOCOUNT ON, et peatada sõnumid mõjutatud ridade arvu kohta iga kord, kui päästik käivitub.
SET NOCOUNT ON
See suvand NOT FOR REPLICATION juhendab SQL Serverit mitte käivitama päästikut, kui andmed replikatsiooniprotsessi ajal muutuvad.
NOT FOR REPLICATION
Ülessane forumist
- Andmebaasinimi – Raamatukogu
- tabelinimi, andmete sisestamiseks ja väljade nimed tabelis, nt. Loo tabel raamat (raamatId, raamatuNimi, author, hind).
- Loo tabel trigerite töö salvestamiseks. Näiteks tabel logi (logiID, kuupaev, sisestatudandmed, kasutaja).
- Trigerinimed ja mida triger peab tegema seoses eelnevalt loodud tabeliga. – DELETE, INSERT, UPDATE
- Kasutajanimi, kes saab töötada ainult varem loodud tabeliga (mitte logi tabel) – Kasutajanimi:Opilane parool: opilane123456 ja ta saab töötada ainult tablis raamat
- Loo andmebaasi – Raamatukogu ja kasuta seda
create database RaamatuKoguSergachev; use RaamatuKoguSergachev
2. Loo tabeli “Raamat”
create table raamat( raamatID int primary key identity(1,1), raamatuNimi varchar(50), author varchar(40), hind int);
3. Loo tabeli “Logi”
create table logi( logiID int primary key identity(1,1), kuupaev datetime, sisestatudAndmed text, kasutaja varchar(50));
4. Loo trigerid tabelis “raamatu”
Triger “Insert”:
create trigger raamatuLisamine on raamat for insert as insert into logi(kasutaja, kuupaev, sisestatudAndmed) select user, getdate(), concat('Lisatud andmed - ', inserted.raamatuNimi, ', ', inserted.author, ', ', inserted.hind, '.') from inserted insert into raamat(raamatuNimi, author, hind) values ('Paul hakkab inseneriks', 'Ilmar Tomusk', 23) select * from raamat select * from logi

Triger “Delete”
create trigger raamatuKustutamine on raamat for delete as insert into logi(kasutaja, kuupaev, sisestatudAndmed) select user, getdate(), concat('Kustutatud andmed - ', deleted.raamatuNimi, ', ', deleted.author, ', ', deleted.hind, '.') from deleted delete from raamat where raamatID = 1; select * from raamat select * from logi
Triger “Update”
create trigger raamatuUuendamine on raamat for update as insert into logi(kasutaja, kuupaev, sisestatudAndmed) select user, getdate(), concat('Vanad andmed ', deleted.raamatuNimi, ', ', deleted.hind, '. Uued andmed: ', inserted.raamatuNimi, ', ', inserted.hind, '.') from deleted inner join inserted on deleted.raamatID = inserted.raamatID select * from raamat update raamat set raamatuNimi = 'Uuendamine test' where raamatID = 2; select * from raamat select * from logi

5. Loo kasutaja: kasutajaNimi: Opilane, parool: opilane123456

Anname talle loa käskudele “SELECT, DELETE, UPDATE, INSERT“
grant Select, insert, delete, update on raamat to Opilane
Trigeri kontrollimine kasutaja “Opilane” kaudu
SELECT ja INSERT
insert into raamat(raamatuNimi, author, hind) values('Krutskitega jõulusoovid', 'Kristina Sepp', 21) select * from raamat

UPDATE
update raamat set raamatuNimi = 'Sünnipäev' where raamatID = 3;
DELETE
DELETE from raamat where raamatID = 3

Nüüd kontrollime logisid, kuid administraatori kaudu
Select * from logi

See on õige! Nüüd näeme tabelites, mida on muudetud/lisatud.
XAMPP Päästikud
Päästiku kustutatud failide vaatamiseks

Päästiku uuendatud failide vaastamiseks

Päästiku lisatud failide vaastamiseks


Ülessane XAMPP’is forumist
- Loo tabeli raamat
create table raamat( raamatID int primary key AUTO_INCREMENT, raamatuNimi varchar(50), author varchar(40), hind int);

2. Loo tabeli “Logi”
create table logi( logiID int primary key AUTO_INCREMENT, kuupaev datetime, sisestatudAndmed text, kasutaja varchar(50));

3. Loo päästikud “Delete”, “Insert”, “Update”
- Loo päästiku “UPDATE”

2. Loo päästike “INSERT”

3. Loo päästiku “DELETE”

4. Kontroll päästikud
Update
update raamat
set raamatuNimi = 'Test'
where raamatID = 1

Delete
Delete from raamat
where raamatID = 1

Insert
insert into raamat(raamatuNimi, author, hind)
values('Uus maailm', 'Pushkin', 25);

Loo tabel author
CREATE TABLE author (
authorID INT PRIMARY KEY AUTO_INCREMENT,
authorNimi VARCHAR(40) NOT NULL,
authorPerenimi VARCHAR(50) NOT NULL
);
Autori ja raamatu tabelite ühendamine
ALTER TABLE raamat
ADD CONSTRAINT fk_author
FOREIGN KEY (authorID) REFERENCES author(authorID);
Loo kasutaja ja kontrollime päästikud
Kasutaja Opilane
Lisan andmeid tabelis Raamat

Seejärgi ma muutunud andmed tabelist Raamat

Ja kustutanud seda

Kõik on korras