SQL TRIGERID

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

Scroll to Top