#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