Язык SQL. SQL событие BEFORE или выполнение триггера перед выполнением SQL запроса

Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Текстовая версия: http://zametkinapolyah.ru/zametki-o-mysql/tema-13-triggery-v-sql-na-primere-bazy-dannyx-sqlite.html
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

— SQL событие BEFORE

— В SQLite нет табличных триггеров, а есть только триггеры строчные,
— то есть FOR EACH ROW триггеры, которые срабатывают при изменении каждой строки в таблице.
— Давайте напишем триггер, который будет срабатывать
— при вставке данных в базу данных, до того, как будет выполнена операция вставки.

— Создадим две таблицы

CREATE TABLE users(
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL,
address TEXT NOT NULL,
mydate TEXT NOT NULL
);

CREATE TABLE user_log (
Id_u INTEGER NOT NULL,
u_date TEXT NOT NULL
);

— Для наполнения второй таблицы мы будем использовать триггер
CREATE TRIGGER my_u_log BEFORE INSERT
ON users
BEGIN
INSERT INTO user_log(id_u, u_date) VALUES (NEW.id, datetime(‘now’));
END;

— Проверим работу триггера
INSERT INTO users(name, age, address, mydate)

VALUES (‘Пупкин’, 27, ‘Адрес’, datetime(‘now’));

SELECT * FROM users;
SELECT * FROM user_log;

— К сожалению, поле date в данном случае не показывает, что вставка данных в таблицу user_log произошла до того, как были вставлены данные в таблицу users. Но этот факт мы можем заметить по значению столбца id_u, которое равно -1, так как SQLite3 просто не знает: какое значение будет в столбце id таблицы users.

ПРИСОЕДИНЯЙТЕСЬ
Поделиться

Кирилл Антонов

Канал для начинающего веб-разработчика. Здесь ты найдешь различные видео уроки о технологиях и программном обеспечение, которые используют веб-разработчики.



Обсуждение закрыто.