📌 Создаем Базу Данных и две таблицы:
Create database trigerTARgv24;
USE trigerTARgv24;
Create table linnad(
linnID int PRIMARY KEY IDENTITY (1,1),
linnanimi varchar(15) NOT NULL,
rahvaarv int);
Create table logi(
id int PRIMARY KEY IDENTITY (1,1),
aeg DATETIME,
toiming varchar(100),
andmed TEXT
)
🔹INSERT TRIGER в таблице “linnad”:
CREATE TRIGGER linnaLisamine
ON linnad --tabelinimi, mis on vaja jälgida
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed)
SELECT
GETDATE(), --aeg
'on tehtud INSERT käsk', --toiming
inserted.linnanimi --andmed
FROM inserted;
📌 Управление действием триггера:
INSERT INTO linnad(linnanimi, rahvaarv)
VALUES ('Tallinn', 600000);
SELECT * FROM linnad;
SELECT * FROM logi;

SQL Triggeri Uuendamine (Изменение):
- Находим таблицу в базе данных;
- Откройте папку «Triggers»;
- Щелкните правой кнопкой мыши по нужному триггеру. Выбираем "Изменить".


Откроется диалоговое окно, в котором мы можем внести необходимые изменения и сохранить их.
Выделить ALTER TRIGGER –> Execute –> Команда выполнена

📌 Поменялся ввод данных в таблицу «logi»:

Tools –> Options –> Designers –> Table and Database Designers –> Убрать галочку

📌 Добавляем поле «kasutaja» в таблицу и сохраняем:


📌 Меняем триггер:
ALTER TRIGGER [dbo].[linnaLisamine]
ON [dbo].[linnad] --tabelinimi, mis on vaja jälgida
FOR INSERT
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(), --USER
GETDATE(), --aeg
'on tehtud INSERT käsk', --toiming
CONCAT('linn: ', inserted.linnanimi, ', elanike arv: ', inserted.rahvaarv) --andmed
FROM inserted;
📌 Добавляет пользователя, который внес в таблицу данные:

🔹DELETE TRIGER в таблице “linnad”:
CREATE TRIGGER linnaKustutamine
ON linnad --tabelinimi, mis on vaja jälgida
FOR DELETE
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(), --USER
GETDATE(), --aeg
'on tehtud DELETE käsk', --toiming
CONCAT('linn: ', deleted.linnanimi, ', elanike arv: ', deleted.rahvaarv) --andmed
FROM deleted;

🔹UPDATE TRIGER в таблице “linnad”:
CREATE TRIGGER linnaUuendamine
ON linnad --tabelinimi, mis on vaja jälgida
FOR UPDATE
AS
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(),
GETDATE(),
'on tehtud UPDATE käsk',
CONCAT('vanad andmed -linn: ', deleted.linnanimi,
', elanike arv: ', deleted.rahvaarv,
'uued andmed -linn: ', inserted.linnanimi,
', elanike arv: ', inserted.rahvaarv)
FROM deleted
INNER JOIN inserted
ON deleted.linnID=inserted.linnID;

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 TEXT,
kasutaja varchar(50)
)

INSERT INTO logi(kasutaja, aeg, toiming, andmed)
VALUES(
NOW(),
‘on tehtud INSERT käsk’,
CONCAT(‘linn:’, new.linnanimi, ‘, elanike arv: ‘, new.rahvaarv)
)


Заполнить таблицу Linnad и проверяем таблицу Logi

✔️ Update:

Проверка:

✔️ DELETE:

Проверка:


🔹 Объединить триггеры INSERT и DELETE:
CREATE TRIGGER linnaLisamineJaKustutamine
ON linnad
AFTER INSERT, DELETE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO logi(kasutaja, aeg, toiming, andmed)
SELECT
SUSER_NAME(),
GETDATE(),
'INSERT',
CONCAT('linn: ', inserted.linnanimi,
', elanike arv: ', inserted.rahvaarv)
FROM inserted
UNION ALL
SELECT
SUSER_NAME(),
GETDATE(),
'DELETE',
CONCAT('linn: ', deleted.linnanimi,
', elanike arv: ', deleted.rahvaarv)
FROM deleted;
END
--Läbivaatus
INSERT INTO linnad(linnanimi, rahvaarv)
VALUES ('Tartu', 50000);
DELETE FROM
linnad
WHERE
linnID=2;
SELECT * FROM linnad;
SELECT * FROM logi;
--Diaktiveerib päästiku
DISABLE TRIGGER linnaL
isamine
ON linnad
📖 Triger2tabelid SQL:
Create database triger2tabelid;
use triger2tabelid;
Create table linnad(
linnID int identity(1,1) PRIMARY KEY,
linnanimi varchar(15),
rahvaarv int);
Create table logi(
id int identity(1,1) PRIMARY KEY,
aeg DATETIME,
toiming varchar(100),
andmed varchar(200)
);
CREATE TABLE maakond(
maakondID int Primary KEY identity(1,1),
maakond varchar(100) UNIQUE,
pindala int);
INSERT INTO maakond(maakond)
VALUES ('Harjumaa');
INSERT INTO maakond(maakond)
VALUES ('Pärnumaa');
SELECT * FROM maakond
ALTER TABLE linnad ADD maakondID int;
ALTER TABLE linnad ADD CONSTRAINT fk_maakond
FOREIGN KEY (maakondID) References maakond(maakondID)
SELECT * FROM linnad;
SELECT * FROM maakond;
INSERT INTO linnad(linnanimi, rahvaarv, maakondID)
VALUES('Tallinn', 600000, 1)
SELECT * from logi;
--disable
Create trigger linnaLisamine
ON linnad
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed)
SELECT GETDATE(),
'on tehtud INSERT',
CONCAT(m.maakond, 'linn ', inserted.linnanimi, ', ', inserted.rahvaarv)
FROM inserted
INNER JOIN maakond m ON m.maakondID=inserted.maakondID;
--drop trigger
drop trigger linnaLisamine;
--puhasta logi tabeli
DELETE FROM logi;
--kontroll
INSERT INTO linnad(linnanimi, rahvaarv, maakondID)
VALUES('Maardu', 50000, 1)
SELECT * from logi;
SELECT * from linnad;
ALTER TABLE logi ADD kasutaja varchar(25);
Create trigger linnaKustutamine
ON linnad
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(),
'on tehtud Delete',
CONCAT(m.maakond, 'linn ', deleted.linnanimi, ', ', deleted.rahvaarv),
SUSER_NAME()
FROM deleted
INNER JOIN maakond m ON m.maakondID=deleted.maakondID;
--проверка таблицы
SELECT * FROM linnad;
DELETE FROM linnad
WHERE linnID=3;
SELECT * FROM linnad;
SELECT * FROM logi;
Create trigger linnaUuendamine
ON linnad
FOR UPDATE
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(),
'on tehtud Update',
CONCAT('vanad andmed - ', m1.maakond, ', pindala: ', m1.pindala, ' linn ', deleted.linnanimi, ', ', deleted.rahvaarv,
' | uued andmed - ', m2.maakond, ', pindala: ', m2.pindala, ' linn ', inserted.linnanimi, ', ', inserted.rahvaarv),
SUSER_NAME()
FROM deleted
INNER JOIN inserted ON deleted.linnID=inserted.linnID
INNER JOIN maakond m1 ON m1.maakondID=deleted.maakondID
INNER JOIN maakond m2 ON m2.maakondID=inserted.maakondID;
--удалить триггер, чтоб перезапустить его
DROP TRIGGER linnaUuendamine
--kontroll
UPDATE linnad SET maakondID=2
WHERE linnID=5;
SELECT * FROM linnad;
SELECT * FROM logi;
SELECT * FROM maakond;
UPDATE maakond SET pindala=1000
WHERE maakondID=1

1️⃣ Создаем таблицу «logitable»:


*️⃣ Создаем таблицу «autoregister»:


2️⃣ Заполняем таблицу «autoregister» данными:


3️⃣ Триггеры для фиксирования, добавления, удаления, изменения данных в таблице «autoregister»:
➖ Триггер на добавление:



➖ Триггер на удаление:



➖ Триггер на изменение данных:




➖➖➖ XAMPP ➖➖➖
1️⃣ Создаём новую таблицу Mark (markID, markNimi) и заполняем её:


Переименовала поле mark на muudel в таблице autoregist, чтоб не было повторений и не запутаться.
2️⃣ Триггеры
🟡Auto Lisamine


🟡 Auto Kustutamine


🟡 Auto Uuendamine


➖➖➖ SQL ➖➖➖
CREATE DATABASE triger2tabelid3;
USE triger2tabelid;
CREATE TABLE autoregister (
id int identity(1,1) PRIMARY KEY,
muudel VARCHAR(50),
aasta INT,
kasutaja VARCHAR(50),
markID INT,
FOREIGN KEY (markID) REFERENCES mark(markID)
);
CREATE TABLE logitable (
id int identity(1,1) PRIMARY KEY,
aeg DATETIME,
toiming VARCHAR(100),
autoAndmed VARCHAR(200),
kasutaja VARCHAR(50)
);
CREATE TABLE mark (
markID int identity(1,1) PRIMARY KEY,
markNimi VARCHAR(100) UNIQUE
);
INSERT INTO mark(markNimi) VALUES ('BMW');
INSERT INTO mark(markNimi) VALUES ('Honda');
INSERT INTO mark(markNimi) VALUES('Tesla');
INSERT INTO autoregister (muudel, aasta, kasutaja, markID) VALUES ('Model S', 2025, 'TestUser', 3);
🟢 AutoLisamine
-- Триггер на добавление автомобиля
CREATE TRIGGER AutoLisamine
ON autoregister
FOR INSERT
AS
INSERT INTO logitable (aeg, toiming, autoAndmed, kasutaja)
SELECT GETDATE(),
'uus auto on lisatud',
CONCAT(inserted.muudel, ', ', m.markNimi), inserted.kasutaja
FROM inserted
INNER JOIN mark m ON m.markID = inserted.markID;
-- Проверка
INSERT INTO autoregister (muudel, aasta, kasutaja, markID)
VALUES ('Civic', 2023, 'Admin', 2);
SELECT * from logitable;
SELECT * from autoregister;


🟢 AutoKustutamine
-- Триггер на удаление автомобиля
CREATE TRIGGER AutoKustutamine
ON autoregister
FOR DELETE
AS
INSERT INTO logitable(aeg, toiming, autoAndmed, kasutaja)
SELECT GETDATE(),
'on tehtud Delete',
CONCAT(m.markNimi, ', ', OLD.muudel, ', ', OLD.kasutaja),
SUSER_NAME()
FROM deleted OLD
INNER JOIN mark m ON m.markID = OLD.markID;
-- Проверка
DELETE FROM autoregister
WHERE markID = 2;
SELECT * FROM autoregister;
SELECT * FROM logitable;


🟢 AutoUuendamine
-- Триггер на обновление автомобиля
CREATE TRIGGER AutoUuendamine
ON autoregister
FOR UPDATE
AS
INSERT INTO logitable (aeg, toiming, autoAndmed, kasutaja)
SELECT GETDATE(),
'on tehtud Update',
CONCAT('Vanad andmed - ', d.muudel, ', ', m1.markNimi,
' | Uued andmed - ', i.muudel, ', ', m2.markNimi),
SUSER_NAME()
FROM deleted d
INNER JOIN inserted i ON d.id = i.id
INNER JOIN mark m1 ON m1.markID = d.markID
INNER JOIN mark m2 ON m2.markID = i.markID;
-- Проверка
UPDATE autoregister SET markID = 2 WHERE id = 6;
SELECT * FROM autoregister;
SELECT * FROM logitable;
SELECT * FROM mark;

