Конструкция IF в MySql создает ошибку # 1064

Я пытаюсь запустить в phpMyAdmin следующий код:

set @tagTokenNum=0;
select @tagTokenNum:=tag_token_id from tag_token where tag_token_name = 'XXX';
delimiter go
if @tagTokenNum is null then 
   insert into tag_token (tag_token_name) values ('XXX');
   select @tagTokenNum:=last_insert_id();
end if;
go

Я также пробовал это без оператора-разделителя и соответствующего go. Я получаю сообщение об ошибке "# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы выбрать правильный синтаксис рядом с ', если @tagTokenNum имеет значение null, затем вставьте в tag_token ..."

Насколько я могу судить, я следую правильному синтаксису операторов IF в MySql. Я гораздо лучше знаком с Microsoft SQL, поэтому вполне возможно, что я что-то делаю не так. Буду признателен за любую помощь, которую вы можете предложить. Спасибо. - Дэйв

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
807
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ISTR, который можно использовать только в операторах if в хранимых процедурах, ref: mysql docs ... Блок IF ... END IF, как и все другие блоки управления потоком, используемые в сохраненных программах ....

Однако я думаю, что вы могли бы добиться того же со следующим:

insert into tag_token (tag_token_name) values ('XXX')
    ON DUPLICATE KEY UPDATE tag_token_name = tag_token_name;

select @tagTokenNum:=tag_token_id from tag_token where tag_token_name = 'XXX'

Я не проверял обходной путь, но он определенно прав в утверждениях IF ...

davearchie 22.10.2008 05:03

Другие вопросы по теме