SQL Triger

Triger – Päästik

Triger see on protsess, millega abil kõik sisse kirjutatud tegevused tehakse automaatselt.

Näiteks, trigeri abil kasutaja saab jälgida mis tegevused olid tehtud andmebaasis (INSERT, UPDATE, DELETE)

Table logi

1
2
3
4
5
6
7
CREATE TABLE logi(
    id int PRIMARY KEY AUTO_INCREMENT,
    kuupaev datetime,
    kasutaja varchar(100),
    andmed TEXT,
    tegevus varchar(100)
);

XAMPP

Triger mis jälgib lisatud tabelisse andmed

Triger mis jälgib kustutatud tabelisse andmed

Triger mis jälgib uuendatud tabelisse andmed

3 trigerit room tabel


SQL Server

Triger mis jälgib lisatud tabelisse andmed

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TRIGGER guestLisamine
ON guest
FOR INSERT
AS
INSERT INTO logi(kuupaev,kasutaja,andmed,tegevus)
SELECT GETDATE(), USER,
CONCAT(inserted.first_name,', ',inserted.last_name,', ',' ,',inserted.member_since),'guest on lisatud'
FROM inserted
--kontroll
INSERT INTO guest(first_name,last_name,member_since) VALUES('Timur','Denisenko','2022-5-6');
select * from guest;
select * from logi;

Triger mis jälgib kustutatud tabelisse andmed

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TRIGGER guestKustuta
ON guest
FOR DELETE
AS
INSERT INTO logi(kuupaev,kasutaja,andmed,tegevus)
SELECT GETDATE(), USER,
CONCAT(deleted.first_name,', ',deleted.last_name,', ',' ,',deleted.member_since),'guest on kustutatud'
FROM deleted
--kontroll
DELETE from guest where guest_id=1;
select * from guest;
select * from logi;

Triger mis jälgib uuendatud tabelisse andmed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TRIGGER guestUuendamine
ON guest
FOR UPDATE
AS
INSERT INTO logi(kuupaev,kasutaja,andmed,tegevus)
SELECT GETDATE(), USER,
CONCAT('vanad andmed: ',deleted.first_name,', ',deleted.last_name,', ',' ,',deleted.member_since,
'\n uued andmed: ',inserted.first_name,', ',inserted.last_name,', ',' ,',inserted.member_since),'guest on uuendatud'
FROM deleted INNER JOIN inserted
ON deleted.guest_id=inserted.guest_id
--kontroll
select * from guest;
update guest set first_name='Timur' where guest_id=2;
select * from guest;
select * from logi;

3 Trigerit

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TRIGGER roomLisamine
ON room
FOR INSERT
AS
INSERT INTO logi(kuupaev,kasutaja,andmed,tegevus)
SELECT GETDATE(), USER,
CONCAT(inserted.number,', ',inserted.name,', ',' ,',inserted.status,', ',inserted.smoke),'room on lisatud'
FROM inserted
--kontroll
INSERT INTO room(number,name,status,smoke) VALUES('505','akula','vaba',1);
select * from room;
select * from logi;
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TRIGGER roomKustuta
ON room
FOR DELETE
AS
INSERT INTO logi(kuupaev,kasutaja,andmed,tegevus)
SELECT GETDATE(), USER,
CONCAT(deleted.number,', ',deleted.name,', ',' ,',deleted.status,', ',deleted.smoke),'room on kustutatud'
FROM deleted
--kontroll
select * from room;
DELETE from room where room_id=3;
select * from room;
select * from logi;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TRIGGER roomUuendamine
ON room
FOR UPDATE
AS
INSERT INTO logi(kuupaev,kasutaja,andmed,tegevus)
SELECT GETDATE(), USER,
CONCAT('vanad andmed: ',deleted.number,', ',deleted.name,', ',' ,',deleted.status,', ',deleted.smoke,
'\n uued andmed: ',inserted.number,', ',inserted.name,', ',' ,',inserted.status,', ',inserted.smoke),'room on uuendatud'
FROM deleted INNER JOIN inserted
ON deleted.room_id=inserted.room_id
--kontroll
select * from room;
update room set number='999' where room_id=4;
select * from room;
select * from logi;