SQL ТРИГГЕРЫ

Триггер — Процесс, при помощи которого записанные в него действия будут выполнятся автоматически.

 Пример — При помощи триггера автоматически заполняться таблица logi, в которой будет фиксироваться в какое время и какое действие выполнялось в таблице linnad.

Create table linnad(
linnID int PRIMARY KEY identity(1,1),
linnanimi varchar(15),
rahvaarv int);
-- logi tabel taidab vastav trigger
Create table logi(
id int PRIMARY KEY identity(1,1),
aeg DATETIME,
toiming  varchar(100),
sisestatud_andmed TEXT
)
Create table linnad(
linnID int PRIMARY KEY identity(1,1),
linnanimi varchar(15),
rahvaarv int);
-- logi tabel taidab vastav trigger
Create table logi(
id int PRIMARY KEY identity(1,1),
aeg DATETIME,
toiming  varchar(100),
sisestatud_andmed TEXT
)
CREATE TRIGGER linna_lisamine
On linnad
After insert
As
Begin
insert into logi (aeg,toiming,sisestatud_andmed)
Select getdate(), 'uus linn on lisatud',
CONCAT(linnanimi, ' rahvaarv- ', rahvaarv)
From inserted;
End

-- kontroll
insert into linnad(aeg,toiming,sisestatud_andmed)
values(wqetwrtw,
wrtwrtm,
wrtwrt)
select * from linnad;
select * from logi;
CREATE TRIGGER linnKustutamine
On linnad
After insert
As
	Begin
	insert into logi (aeg,toiming,sisestatud_andmed)
	Select getdate(), 'linn on kustutatud',
	deleted.linnanimi
	From deleted;
End


-- kontroll
delete from linnad where linnID=1;
select * from linnad;
select * from logi;
CREATE TRIGGER linnUuendamine
On linnad
for update
As
Begin
	insert into logi (aeg,kasutaja, toiming,sisestatud_andmed)
	Select getdate(), 
	user,
	'linn andmed on uuendatud',
	concat(
	'vanad andmed: ', d.linnanimi, 'rahvaarv - ', d.rahvaarv,
	'uued andmed; ', i.linnanimi, ',', i.rahvaarv 
	)
	From deleted d
	inner join inserted i
	on i.linnID=d.LinnID;
End

-- kontroll
update linnad set linnanimi='Tartu', rahvaarv=100
where linnID=4;
select * from linnad;
select * from logi;

CREATE TABLE autoRegistr (
id INT PRIMARY KEY IDENTITY(1,1),
color varchar(300),
gosNumber varchar(300),
mark varchar(300)
);
CREATE TABLE logitabel (
id INT IDENTITY(1,1) PRIMARY KEY,
toiming varchar(300),
aeg DATETIME,
auto_Andmed varchar(300)
);
--lisamine kontroll
CREATE TRIGGER autoRegistr_lisamine
ON autoRegistr
AFTER INSERT
AS
BEGIN
    INSERT INTO logitabel (toiming, aeg, auto_Andmed)
    SELECT 'Uus andmed on lisatud', GETDATE(), CONCAT(color, ', ', gosNumber, ', ', mark)
    FROM inserted;
END;
-- kontroll
INSERT INTO autoRegistr (color, gosNumber, mark)
VALUES ('Red', 'ABC123', 'Toyota');
SELECT * FROM autoRegistr;
SELECT * FROM logitabel;
--kustutamine kontroll
CREATE TRIGGER autoRegistr_kustutamine
ON autoRegistr
AFTER DELETE
AS
BEGIN
    INSERT INTO logitabel (toiming, aeg, auto_Andmed)
    SELECT 'Andmed on kustutatud', GETDATE(), CONCAT(color, ', ', gosNumber, ', ', mark)
    FROM deleted;
END;
-- kontroll
DELETE FROM autoRegistr
WHERE id = 1;
SELECT * FROM autoRegistr;
SELECT * FROM logitabel;
--uuendamine kontroll
CREATE TRIGGER autoRegistr_muutmine
ON autoRegistr
AFTER UPDATE
AS
BEGIN
    INSERT INTO logitabel (toiming, aeg, auto_Andmed)
    SELECT 'Andmed on uuendamitud', GETDATE(), CONCAT(color, ', ', gosNumber, ', ', mark)
    FROM inserted;
END;
-- kontroll
UPDATE autoRegistr
SET color = 'Blue'
WHERE id = 2;
SELECT * FROM autoRegistr;
SELECT * FROM logitabel;