如何在MySQL中使用带有ALTER语句的IF语句?

时间:2015-08-31 21:39:33

标签: mysql

我希望只在以前不存在的情况下添加列。这样做的动机是我们可以将任何版本的生产实例升级到最新版本。

这就是我正在尝试的内容,但我在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;

我做错了什么?

3 个答案:

答案 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上的步骤进行了操作:

  • 创建sproc(参见链接)
  • 想要向表中添加新列时调用sproc

或者,正如@Ollie Jones所提到的,您可以在应用程序级别执行此操作,但我在我的案例中使用.sql文件。它还节省了对DB的多次调用,而不是在服务器级别完成。