Результат триггера MySQL — 1064

#mysql #sql #if-statement #triggers #mysql-error-1064

#mysql #sql #if-оператор #триггеры #mysql-ошибка-1064

Вопрос:

мне нужно создать триггер в sql, чтобы выполнить следующее: таблица WordPress ‘options’ имеет в id 1 и id 2 URL-адрес option_value веб-сайта.

Если этот URL-адрес будет изменен в этом конкретном месте (id 1 amp; id2), триггер должен запуститься, чтобы вернуть значение old.option_value

 CREATE TRIGGER tr_up_otpions_value
BEFORE UPDATE ON option_value FOR EACH ROW
BEGIN
IF (:old.option_value = 'https://example.com') then
:new.option_value := 'https://example.com';
end if;
end;
  

но я получаю следующую ошибку:

 #1064 - Error ':old.option_value = 'https://example.com') then
    :new.option_value := 'h...' Row 4
  

Ответ №1:

Вам нужно удалить : знак из старого и нового значений

Также вам нужно добавить ключевое слово set.

После этого, если у вас есть таблица, которая выглядит примерно так:

 create table Zr_options (option_value varchar(500))
  

тогда этот ТРИГГЕР BEFORE UPDATE будет работать:

 CREATE TRIGGER tr_up_otpions_value
BEFORE UPDATE 
ON Zr_options FOR EACH ROW
BEGIN
    IF old.option_value = 'https://example.com' then
        set new.option_value = 'https://example.com';
    end if;
end;
  

Вот демонстрация:

ДЕМОНСТРАЦИЯ

Комментарии:

1. я сделал, как вы объяснили, 1. создайте таблицу option_value(option_value varchar(500)) 2. ВСТАВЬТЕ В ЗНАЧЕНИЯ option_value(‘http:test ‘) 3. ВСТАВЬТЕ В option_value ЗНАЧЕНИЯ (‘ example.com ‘ ) 4. СОЗДАЙТЕ ТРИГГЕР tr_up_otpions_value ПЕРЕД ОБНОВЛЕНИЕМ option_value ДЛЯ КАЖДОЙ СТРОКИ, НАЧИНАЮЩЕЙСЯ, ЕСЛИ старая.option_value = ‘ example.com ‘ затем установите new.option_value := ‘ example.com ‘; end if; end; но это дает мне ту же ошибку: #1064 — Ошибка в SQL-синтаксисе «. Строка 6

2. Привет, @max, можешь поделиться со мной всей ошибкой? Как вы можете видеть здесь.: dbfiddle.uk / … все работает нормально…

3. по ссылке я прикрепил скриншот таблицы, возможно, это поможет. ссылка и это сообщение об ошибке

4. Привет, @max, в вашем изображении ошибки отсутствует одна часть: ; end if; end; это потому, что изображение обрезано или?

5. да, имя таблицы — Zr_options, и в нем есть значение option_value с URL-адресом внутри, если этот URL-адрес будет изменен, он должен активироваться на old.значение option_value в option_id 1 или 2