Язык 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.
Последние сообщения
127 полезных и бесплатных онлайн академий
23.04.2019
Ресурсы для objective-C программистов
21.03.2018