我希望只在以前不存在的情况下添加列。这样做的动机是我们可以将任何版本的生产实例升级到最新版本。
这就是我正在尝试的内容,但我在IF
语句附近遇到语法错误:
use database_name
SELECT @rowcount:=COUNT(column_name)
FROM information_schema.columns
WHERE table_name = 'table_name'
AND column_name = 'column_2';
IF @rowcount < 1 THEN
ALTER TABLE table_name
ADD COLUMN column_2 VARCHAR(42) DEFAULT 'abcd',
END IF;
commit;
我做错了什么?
答案 0 :(得分:0)
你问:
如何在MySQL中使用带有ALTER语句的IF语句?
你不能那样做。 MySQL的DML和DDL没有像表服务器的其他品牌和型号那样集成。
您不能将DML放在IF语句或事务之类的内容中。如果您需要执行此类操作,则必须使用应用程序编程语言来发出更简单的SQL。
答案 1 :(得分:0)
我认为你应该改变
IF @rowcount < 0 THEN
ALTER TABLE table_name
ADD COLUMN column_2 VARCHAR(42) DEFAULT 'abcd',
END IF;
并检查表是否存在。
答案 2 :(得分:0)
正如@Ollie Jones提到的那样,并且从Using an IF Statement in a MySQL SELECT query开始,看起来似乎不可能在sprocs或函数之外使用if语句。
我按照http://www.cryer.co.uk/brian/mysql/howto_add_column_unless_exists.htm上的步骤进行了操作:
或者,正如@Ollie Jones所提到的,您可以在应用程序级别执行此操作,但我在我的案例中使用.sql
文件。它还节省了对DB的多次调用,而不是在服务器级别完成。