Перезапись значения в переменной - 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
равным пустой строке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д