Перезапись значения в переменной - 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 ;

Объяснение кода листинга программы

  1. Удаление существующего триггера с именем bl_phones_update, если он существует.
  2. Установка разделителя для оператора CREATE TRIGGER на символ ^^.
  3. Создание триггера с именем bl_phones_update, который активируется после каждого обновления записи в таблице bl_phones.
  4. Установка переменной @changes равной пустой строке.
  5. Проверка, было ли изменено поле phone в обновленной записи. Если да, то переменной @changes присваивается значение 'hhh'.
  6. Вставка записи в таблицу logs, содержащей информацию о пользователе, времени, таблице, идентификаторе записи и типе изменения, а также значение переменной @changes, представленное в виде строки JSON.
  7. Установка разделителя для оператора DELIMITER на символ ;.
  8. Установка значения переменной @changes равным пустой строке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.667 из 5