如果不存在,请使用SQL语句忽略表添加列

时间:2014-03-04 12:39:40

标签: mysql sql mysql-error-1060

我想在mysql表中添加一个新列,但是如果该列已经存在,我想忽略添加列

我目前正在使用

ALTER IGNORE TABLE `db`.`tablename` ADD COLUMN `column_name` text NULL;

但这会引发错误:"ERROR 1060 (42S21): Duplicate column name 'column_name'"

即使我正在使用IGNORE,这也无效

我希望这可以使用普通的SQL语句而不是存储过程

1 个答案:

答案 0 :(得分:3)

根据documentation

  

IGNORE是标准SQL的MySQL扩展。它控制ALTER的方式   如果新表中的唯一键上有重复项,则表可用   如果启用严格模式时发生警告。如果不是IGNORE   如果指定,则复制将被中止并在重复键错误时回滚   发生。如果指定了IGNORE,则只使用行的一行   复制一个唯一的密钥。其他冲突的行将被删除。   不正确的值被截断为最接近的匹配可接受   值。

也就是说,它用于不同的目的,而不是所有错误。你想要的是ALTER TABLE ADD IF NOT EXISTS之类的东西,而且这种语法不存在。

在存储过程中,您可以使用if语句查看列是否已存在(使用INFORMATION_SCHEMA.COLUMNS)。

Here是一个表示同样问题的SQL小提琴。