Вы намекали на это в своем комментарии , но ни один из ответов здесь не указывает это явно, поэтому я буду:
В MySQL вы не можете использовать оператор IF вне тела хранимой процедуры. Документация подразумевает это, когда вводит понятие как «оператор IF для хранимых программ » (мой акцент).
Насколько я вижу, не существует простого способа управления потоком выполнения в инструкциях, выданных в командной строке или через клиента (например, из PHP), кроме как путем запроса значений, а затем переключения потока управления на основе этих значений вне MySQL (то есть используя оператор PHP if
вместо MySQL). Я хотел бы быть исправлен на это, хотя: -)
Вы можете моделировать это в каждом конкретном случае, используя другие конструкции.
Например:
IF x THEN
INSERT INTO mytable (mycol)
VALUES ('foo')
END IF
может стать
INSERT INTO mytable (mycol)
SELECT 'foo'
FROM dual
WHERE x
(согласно этому ответу )
Вы также можете создать, вызвать, а затем удалить новую хранимую процедуру:
DELIMITER \\
CREATE PROCEDURE tmpfunc() BEGIN
IF x THEN
INSERT INTO mytable (mycol)
VALUES ('foo');
END IF;
END \\
DELIMITER ;
CALL tmpfunc();
DROP PROCEDURE tmpfunc;
(согласно этому ответу )