Курс по SQL и основам реляцион.. - Кирилл Антонов
Язык SQL. SQL событие BEFORE или выполнение триггера перед выполнением SQL запроса
Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Текстовая версия: http://zametkinapolyah.ru/zame....tki-o-mysql/tema-13-
Паблик блога в ВК: 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.
- Лучшие комментарии
- Последние комментарии