Skip to content
Home » Triggers

Triggers

[XAMPP] Ühe tabeli triggeri loomine harjutus






[XAMPP] Harjutus kahe tabelite seosete (on loodud tabel 'omanik')






[SQL Server] Ühe tabeli triggeri loomine harjutus
CREATE DATABASE maanteamet;
USE maanteamet;

CREATE TABLE autoregister (
    autoID INT identity(1,1) PRIMARY KEY,
    autoNimi VARCHAR(50),
    aasta int,
    autoNR VARCHAR(6),
	omanikID int,
	CONSTRAINT FK_omanik FOREIGN KEY (omanikID) REFERENCES omanik(omanikID)
)

CREATE TABLE logitabel (
	id INT identity(1,1) PRIMARY KEY,
	aeg datetime,
	toiming varchar(100),
	autoAndmed text,
	kasutaja varchar(25)
)

Triggerite loomine

CREATE TRIGGER autoLisamine 
ON autoregister 
AFTER INSERT 
AS 
INSERT INTO logitabel(aeg, toiming, autoAndmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud INSERT käsk',
    CONCAT('auto nimi: ', autoregister.autoNimi, 
           ', aasta: ', autoregister.aasta, 
           ', auto number: ', autoregister.autoNR 
           ),
    SUSER_NAME()
FROM autoregister
CREATE TRIGGER autoKustutamine
ON autoregister 
AFTER DELETE
AS 
INSERT INTO logitabel(aeg, toiming, autoAndmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud DELETE käsk',
    CONCAT('auto on kustutatud: ', deleted.autoNR 
           ),
    SUSER_NAME()
FROM deleted
CREATE TRIGGER autoUuendamine
ON autoregister 
AFTER UPDATE
AS 
INSERT INTO logitabel(aeg, toiming, autoAndmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud UPDATE käsk',
    CONCAT('vanad andmed - ', 'auto: ', deleted.autoNimi, ', aasta: ', deleted.aasta, ', auto number: ', deleted.autoNR,
     ' | uued andmed - ', 'auto: ', autoregister.autoNimi, ', aasta: ', autoregister.aasta, ', auto number: ', autoregister.autoNR),
    SUSER_NAME()
FROM deleted
INNER JOIN autoregister on deleted.autoID = autoregister.autoID

Sisestan andmed

insert into autoregister(autoNimi, aasta, autoNR) VALUES
('Mitsubishi', 2008, '286MGE'),
('Toyota', 1996, '361MGW')

Eemaldan andmed

delete from autoregister where autoID=3

Uuendan andmed

UPDATE autoregister
SET autoNR = '376JSH'
WHERE autoID = 4;

Tehtud tegevused logi tabelis

[SQL Server] Harjutus kahe tabelite seosete (on loodud tabel 'omanik')
CREATE TABLE omanik (
	omanikID int identity(1,1) PRIMARY KEY,
	nimi varchar(50)
)

Sisestan andmed

insert into omanik(nimi) VALUES
('Eugene R'), ('Mark T')

Triggerite loomine

CREATE TRIGGER autoLisamine2tabelid
ON autoregister 
AFTER INSERT 
AS 
INSERT INTO logitabel(aeg, toiming, autoAndmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud INSERT käsk',
    CONCAT('auto nimi: ', autoregister.autoNimi, 
           ', aasta: ', autoregister.aasta, 
           ', auto number: ', autoregister.autoNR,
		   ', omanik nimi: ', nimi),
    SUSER_NAME()
FROM autoregister
inner join omanik o ON autoregister.omanikID=o.omanikID
CREATE TRIGGER autoUuendamine2tabelid
ON autoregister 
AFTER UPDATE
AS 
INSERT INTO logitabel(aeg, toiming, autoAndmed, kasutaja)
SELECT 
    GETDATE(),
    'on tehtud UPDATE käsk',
    CONCAT('vanad andmed - ', 'auto: ', deleted.autoNimi, ', aasta: ', deleted.aasta, ', auto number: ', deleted.autoNR, ', omanik nimi: ', o1.nimi,
     ' | uued andmed - ', 'auto: ', inserted.autoNimi, ', aasta: ', inserted.aasta, ', auto number: ', inserted.autoNR, ', omanik nimi: ', o2.nimi),
    SUSER_NAME()
FROM deleted
inner join inserted ON deleted.autoID = inserted.autoID
inner join omanik o1 ON o1.omanikID=deleted.omanikID
inner join omanik o2 ON o2.omanikID=inserted.omanikID

Sisestan andmed

insert into autoregister(autoNimi, aasta, autoNR, omanikID) VALUES
('Mitsubishi', 2008, '286MGE', 1),
('Toyota', 1996, '361MGW', 2)

Uuendan andmed

UPDATE autoregister
SET omanikID = 1
WHERE autoID = 8;

Tehtud tegevused logi tabelis