Перезапись значения в переменной - MySQL
Формулировка задачи:
SET @changed = '';
if (@changed='')
SET @changed = now();
end if;
SELECT @changed;
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if (@changed='') SET @changed = now()' at line 1
Решение задачи: «Перезапись значения в переменной»
textual
Листинг программы
DROP TRIGGER IF EXISTS `bl_phones_update`;
delimiter ^^
CREATE TRIGGER `bl_phones_update` AFTER UPDATE ON `bl_phones`
FOR EACH ROW BEGIN
SET @changes = '';
if (old.`phone`<>new.`phone`)
SET @changes = 'hhh';
end if;
insert into `logs`
(`user`,`time`,`data_table`,`data_id`,`change_type`,`changes`)
values (
(select `user_id` from `users` where `connect_id`=CONNECTION_ID()),
UNIX_TIMESTAMP(),
'bl_phones',
new.`id`,
'U',
concat('{',@changes,'}')
);
END^^
delimiter ;
Объяснение кода листинга программы
- Удаление существующего триггера с именем
bl_phones_update, если он существует. - Установка разделителя для оператора
CREATE TRIGGERна символ^^. - Создание триггера с именем
bl_phones_update, который активируется после каждого обновления записи в таблицеbl_phones. - Установка переменной
@changesравной пустой строке. - Проверка, было ли изменено поле
phoneв обновленной записи. Если да, то переменной@changesприсваивается значение'hhh'. - Вставка записи в таблицу
logs, содержащей информацию о пользователе, времени, таблице, идентификаторе записи и типе изменения, а также значение переменной@changes, представленное в виде строки JSON. - Установка разделителя для оператора
DELIMITERна символ;. - Установка значения переменной
@changesравным пустой строке.