Триггер
Триггер — это процесс, при помощи которого записанные в него действия будут выполняться автоматически.
Работа с триггером в SQL:
Работа с триггером в XAMPP:
Создаем базу данных и таблицы (у нас autod и logi (куда фиксируются действия с таблицами, которая заполняется автоматически при помощи триггеров))
CREATE DATABASE AutoRegister

CREATE TABLE autod(
autoID int PRIMARY KEY IDENTITY(1,1),
registreerimismark varchar(6) NOT NULL,
mark varchar(30),
esmaneRegistreerimine DATE,
kere varchar(30),
varvus varchar(30),
voimsuskW int,
kutus varchar(30),
kaigukast varchar(30),
omanik varchar(30));


CREATE TABLE logi(
id int PRIMARY KEY IDENTITY(1,1),
aeg DATETIME,
toiming varchar(100),
andmed TEXT,
kasutaja varchar(30));




CREATE TABLE autod(
autoID int PRIMARY KEY AUTO_INCREMENT,
registreerimismark varchar(6) NOT NULL,
mark varchar(30),
esmaneRegistreerimine DATE,
kere varchar(30),
varvus varchar(30),
voimsuskW int,
kutus varchar(30),
kaigukast varchar(30),
omanik varchar(30));

CREATE TABLE logi(
id int PRIMARY KEY AUTO_INCREMENT,
aeg DATETIME,
toiming varchar(100),
andmed TEXT,
kasutaja varchar(30));


Создаем триггер для отслеживания добавленных данных:
CREATE TRIGGER autoLisamine
ON autod
FOR INSERT
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT GETDATE(),
'uus auto on lisatud',
CONCAT ('registreerimismark: ', inserted.registreerimismark, ' / mark: ', inserted.mark, ' / omanik: ', inserted.omanik),
SUSER_NAME()
FROM inserted;

Проверка:
INSERT INTO autod (registreerimismark, mark, esmaneRegistreerimine, kere, varvus, voimsuskW, kutus, kaigukast, omanik)
VALUES
('123ABC', 'Toyota Corolla', '2018-05-12', 'Sedaan', 'Sinine', 85, 'Bensiin', 'Automaat', 'Jaan Tamm'),
('456DEF', 'Volkswagen Golf', '2020-08-25', 'Luukpära', 'Must', 96, 'Diisel', 'Manuaal', 'Mari Mets'),
('789GHI', 'BMW X5', '2019-03-17', 'Maastur', 'Valge', 195, 'Bensiin', 'Automaat', 'Peeter Põld'),
('321JKL', 'Audi A4', '2017-11-30', 'Sedaan', 'Hall', 110, 'Diisel', 'Automaat', 'Laura Kask'),
('654MNO', 'Honda Civic', '2021-06-14', 'Luukpära', 'Punane', 90, 'Bensiin', 'Manuaal', 'Karl Kivi'),
('987PQR', 'Ford Focus', '2016-09-05', 'Universaal', 'Sinine', 74, 'Bensiin', 'Automaat', 'Anna Saar'),
('135STU', 'Mercedes-Benz C200', '2019-12-20', 'Sedaan', 'Must', 150, 'Diisel', 'Automaat', 'Erik Leht'),
('246VWX', 'Škoda Octavia', '2015-04-08', 'Luukpära', 'Roheline', 77, 'Diisel', 'Manuaal', 'Piret Maasik'),
('357YZA', 'Nissan Qashqai', '2022-01-15', 'Maastur', 'Hall', 103, 'Hübriid', 'Automaat', 'Toomas Ruut'),
('468BCD', 'Tesla Model 3', '2023-07-10', 'Sedaan', 'Valge', 283, 'Elektri', 'Automaat', 'Kati Kask');
SELECT * FROM autod;
SELECT * FROM logi;
Итог:




Проверка:

Итог:


Создаем триггер для отслеживания обновленных данных:
CREATE TRIGGER autoUuendamine
ON autod
FOR UPDATE
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT
GETDATE(),
'andmete uuendamine',
CONCAT('Vanad andmed: registreerimismark:', deleted.registreerimismark, ', mark: ', deleted.mark, ', esmane registreerimine: ', deleted.esmaneRegistreerimine, ', kere: ', deleted.kere, ', varvus: ', deleted.varvus, ', voimsus (kW)', deleted.voimsuskW, ', kutus: ', deleted.kutus, ', kaigukast: ', deleted.kaigukast, ', omanik: ', deleted.omanik, ' / Uued andmed: registreerimismark: ', inserted.registreerimismark, ', mark: ', inserted.mark, ', esmane registreerimine: ', inserted.esmaneRegistreerimine, ', kere: ', inserted.kere, ', varvus: ', inserted.varvus, ', voimsus (kW)', inserted.voimsuskW, ', kutus: ', inserted.kutus, ', kaigukast: ', inserted.kaigukast, ', omanik: ', inserted.omanik),
SUSER_NAME()
FROM deleted
INNER JOIN inserted
ON deleted.autoID=inserted.autoID

Проверка:
UPDATE autod
SET omanik='Anna Oleks'
WHERE autoID=3;
SELECT * FROM autod;
SELECT * FROM logi;
Итог:



Проверка:
UPDATE autod
SET omanik='Anna Oleks'
WHERE autoID=3;
Итог:


Создаем триггер для отслеживания удаленных данных:
CREATE TRIGGER autoKustutamine
ON autod
FOR DELETE
AS
INSERT INTO logi(aeg, toiming, andmed, kasutaja)
SELECT
GETDATE(),
'andmete kustutamine',
CONCAT ('registreerimismark: ', deleted.registreerimismark, ' / mark: ', deleted.mark, ' / omanik: ', deleted.omanik),
SUSER_NAME()
FROM deleted;

Проверка:
DELETE FROM autod
WHERE autoID=7;
SELECT * FROM autod;
SELECT * FROM logi;
Итог:



Проверка:
DELETE FROM autod
WHERE autoID=7;
Итог:


Создание пользователя:


Предоставление прав:
GRANT SELECT, INSERT, UPDATE, DELETE ON autod TO Kasutaja;
GRANT SELECT, INSERT, UPDATE, DELETE ON trahvid TO Kasutaja;
DENY ALTER ON autod TO Kasutaja;
DENY ALTER ON trahvid TO Kasutaja;
DENY SELECT, INSERT, UPDATE, DELETE ON logi TO Kasutaja;
Просмотр таблицы logi из учетной записи пользователя:
select*from logi

Добавление штрафов из учетной записи пользователя:
INSERT INTO trahvid (autoID, trahviKuupaev, tyyp, summa, tasutud)
VALUES
(3, '2024-03-10', 'Punase tule eiramine', 200.00, 'ei'),
(4, '2024-03-20', 'Turvavöö mittekasutamine', 40.00, 'jah'),
(5, '2024-04-01', 'Mobiili kasutamine sõidu ajal', 80.00, 'ei'),
(1, '2024-04-05', 'Vale möödasõit', 150.00, 'ei')

Обновление штрафов из учетной записи пользователя:
UPDATE trahvid SET autoID=9
WHERE trahvID=1;

Удаление штрафов из учетной записи пользователя:
DELETE FROM trahvid
WHERE trahvID=4;

Просмотр таблицы logi под учетной записью root:
SELECT*FROM logi




Предоставление прав:



Просмотр таблиц из учетной записи пользователя:


Добавление штрафов из учетной записи пользователя:


Обновление штрафов из учетной записи пользователя:



Удаление штрафов из учетной записи пользователя:


Просмотр таблицы logi под учетной записью root:
