SQL TRIGERID

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

  1. Andmebaasinimi – Raamatukogu
  2. tabelinimi, andmete sisestamiseks ja väljade nimed tabelis, nt. Loo tabel raamat (raamatId, raamatuNimi, author, hind).
  3. Loo tabel trigerite töö salvestamiseks. Näiteks tabel logi (logiID, kuupaev, sisestatudandmed, kasutaja).
  4. Trigerinimed ja mida triger peab tegema seoses eelnevalt loodud tabeliga. – DELETE, INSERT, UPDATE
  5. Kasutajanimi, kes saab töötada ainult varem loodud tabeliga (mitte logi tabel)  –  Kasutajanimi:Opilane   parool: opilane123456 ja ta saab töötada ainult tablis raamat
  1. 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

  1. 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”

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