Creating triggers in SQL and XAMPP

📌 Создаем Базу Данных и две таблицы:

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 linnaLisamine
ON linnad

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

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

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

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

➖ Триггер на добавление:

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

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