DROP PROCEDURE IF EXISTS update_migration;
DELIMITER //
CREATE PROCEDURE update_migration ()
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'bid_log' AND COLUMN_NAME = 'Paid' ) THEN
ALTER TABLE 'bid_log' ADD 'Paid' INT NULL;
END IF;
END //
DELIMITER ;
Я использую SELECT 1 из таблицы схемы, чтобы проверить, существует ли столбец, но если столбец не существует, я получаю эту ошибку:
ERROR 1054 (42S22) at line 1: Unknown column 'bid_log' in 'where clause'
Как я могу проверить существующий столбец без mysql, бросая ошибку для наличия недостающего значения в моем запросе выбора?
SELECT 1 FROM information_schema.columns WHERE table_name = 'bid_log' AND COLUMN_NAME = 'Paid'
В таблице схемы имя_таблицы и имя_кода хранятся как строковые значения, поэтому их следует сравнивать с идентификаторами строк, а не с идентификаторами объектов.
Спасибо за ответ underscore_d за ответ
bid_log
и, следовательно, сказали парсеру, что это имя объекта, а не строковая константа.ALTER
, которая находится внутри блокаIF
?