Triger (trigger) – protsess, mille abil tema sisse kirjutatud tegevused automaatselt käivitatakse.
create database trigerTARpv23
use trigerTARpv23
-- tabeli toode
create table toode(
toodeId int primary key identity(1,1),
toodeNimi varchar(50),
hind int);
--loome tabeli mis täidab 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
LISAMINE
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
-- kontrollimiseks lisame toode
INSERT INTO toode(toodeNimi, hind)
VALUES ('pirn', 12);
SELECT * FROM toode;
SELECT * FROM logi;


KUSTUTAMINE
-- triger toode kustutamine
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
-- konstollimine
DELETE FROM toode
WHERE toodeId = 1;
SELECT * FROM toode;
SELECT * FROM logi;

UUENDAMINE
-- triger toode uuendamine
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 andmed', inserted.toodeNimi, ',', inserted.hind)
FROM deleted INNER JOIN inserted
ON deleted.toodeId=inserted.toodeId
-- kontrollimiseks uuendame toode
UPDATE toode SET toodeNimi='orange meloon'
where toodeId=2;
SELECT * FROM toode;
SELECT * FROM logi;

ISESEISEV TÖÖ
https://moodle.edu.ee/mod/forum/discuss.php?d=1050326#p2025247
Ülesanne:
- Andmebaasinimi – KinoTARpv23
- Loo tabel Kava (filmID, filmiNimi, näitamiseKuupäev, hind).
- Loo tabel trigerite töö salvestamiseks. logi (logiID, kasutaja, andmed, kuupaev).
- Trigerinimi – FilmiKava_Lisame – peab lisama uusi filme
- Trigerinimi – FilmiNimi_Uuendamine – peab uuendama filmi nimi
- Kasutajanimi – tootaja
Lisame tabelid
-- OMA
create database KinoTARpv23
use KinoTARpv23
CREATE TABLE Kava (
filmID INT IDENTITY (1, 1) PRIMARY KEY,
filmiNimi VARCHAR (255) NOT NULL,
näitamiseKuupäev DATE NOT NULL,
hind INT NOT NULL
);
CREATE TABLE logi (
logiID INT IDENTITY PRIMARY KEY,
kasutaja VARCHAR(255) NOT NULL,
filmID INT NOT NULL,
filmiNimi VARCHAR(255) NOT NULL,
näitamiseKuupäev DATE NOT NULL,
hind INT NOT NULL,
kuupaev DATETIME NOT NULL,
operation CHAR(3) NOT NULL,
CHECK(operation = 'INS' or operation='UPD')
);
Lisame triger
CREATE TRIGGER FilmiKava_Muudamine
ON Kava
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO logi(
kasutaja,
filmID,
filmiNimi,
näitamiseKuupäev,
hind,
kuupaev,
operation
)
SELECT
user,
i.filmID,
i.filmiNimi,
i.näitamiseKuupäev,
i.hind,
GETDATE(),
'INS'
FROM
inserted i
UNION ALL
SELECT
user,
d.filmID,
d.filmiNimi,
d.näitamiseKuupäev,
d.hind,
GETDATE(),
'UPD'
FROM deleted d;
END
INSERT INTO Kava(
filmiNimi,
näitamiseKuupäev,
hind
)
VALUES (
'Kontroll film',
'2912-12-12',
5
);
SELECT * FROM logi;

Lisame kasutaja


USE KinoTARpv23;
GRANT SELECT ON dbo.Kava TO tootajaNew;
GRANT INSERT ON dbo.Kava TO tootajaNew;
GRANT UPDATE ON dbo.Kava TO tootajaNew;
DENY DELETE ON dbo.Kava TO tootajaNew;
DENY SELECT, INSERT, UPDATE, DELETE ON dbo.[logi] TO tootajaNew;
Kontrollimine
Kasuta logi tabeli
admin

Kasutaja

INSERT

UPDATE

DELETE
