Anton Buivol õpimapp / portfoolio

en_USru_RU

Trigger

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

XAMPP

 Create table linnad(
 linnID int Auto_increment PRIMARY KEY,
 linnanimi varchar(15),
 rahvaarv int);

 Create table logi(
 id int Auto_increment PRIMARY KEY,
 aeg DATETIME,
 toiming  varchar(100),
 andmed varchar(200)
 )

Триггер на отслеживание добавленных в таблицу linnad записей

Для проверки:
INSERT INTO linnad(linnanimi, rahvaarv)
Values (‘Narva’, 436863)

Concat()- объединение данных из нескольких полей

Для проверки:
INSERT INTO linnad(linnanimi, rahvaarv)
Values (‘Pärnu’, 70000)

Триггер на отслеживание удаленных в таблице linnad записей

Для проверки:
DELETE FROM linnad
WHERE linnID=1

Триггер на отслеживание измененных записей в таблице linnad

Для проверки:
UPDATE linnad
SET linnanimi= ‘Pärnuu’
WHERE linnID=2

SQL Server

Create table linnad(
linnID int identity(1,1) PRIMARY KEY,
linnanimi varchar(15) unique,
rahvaarv int);

Create table logi(
id int identity(1,1) PRIMARY KEY,
aeg DATETIME,
toiming varchar(100),
andmed varchar(200),
kasutaja varchar(100)
);

CREATE TRIGGER linnaLisamine
ON linnad
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(), ‘linn on lisatud’,
inserted.linnanimi, USER
FROM inserted

INSERT INTO linnad(linnanimi, rahvaarv)
VAlues (‘Tallinn’, 600000);
SELECT * FROM linnad;
select * from logi

ALTER TRIGGER [dbo].[linnaLisamine]
ON [dbo].[linnad]
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(), ‘linn on lisatud’,
concat(inserted.linnanimi, ‘, ‘, inserted.rahvaarv),
USER
FROM inserted

create trigger linnaKustutamine
on linnad
for delete
as
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
select getdate(),’linn on kustutatud’,
deleted.linnanimi, USER
FROM deleted

Delete from linnad
Where linnID = 1;
select * from linnad;
select * from logi

CREATE TRIGGER linnaUuendamine
ON linnad
FOR UPDATE
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(), ‘linn on uuendatud’,
concat(‘vanad andmed: ‘, deleted.linnanimi, ‘, ‘,deleted.rahvaarv,
‘ uued andmed: ‘, inserted.linnanimi, ‘, ‘,inserted.rahvaarv),
USER
FROM deleted INNER JOIN inserted
ON inserted.linnID=deleted.linnID

Kontrollimiseks:
update linnad
set linnanimi=’Pärnu’,rahvaarv=20083
where linnID=6;
select * from linnad;
select * from logi