如果MySQL中不存在则添加列

时间:2011-02-21 18:14:21

标签: mysql sql alter-table

我认为这很容易,但我只是在那些列已经不存在的情况下才尝试运行此命令:

ALTER TABLE `surveytable` ADD IF NOT EXISTS  Survey_Name_Qualtrics VARCHAR(20);
ALTER TABLE `surveytable` ADD IF NOT EXISTS Survey_URL_Qualtrics VARCHAR(600);

4 个答案:

答案 0 :(得分:1)

    CREATE PROCEDURE addcol() BEGIN
      IF NOT EXISTS(
        SELECT * FROM information_schema.COLUMNS
        WHERE COLUMN_NAME='new_column' AND TABLE_NAME='the_table' AND TABLE_SCHEMA='the_schema'
        )
    THEN
        ALTER TABLE `the_schema`.`the_table`
        ADD COLUMN `new_column` bigint(20) unsigned NOT NULL default 1;

       END IF;
    END;


     delimiter ';'

     CALL addcol();

DROP PROCEDURE addcol;

这是我使用的代码,我认为如果不存在于ALTER列上,你可以使用它。

如果您尝试插入已存在的列,我可以观察您获得的错误的另一种选择,我认为它是1062.并处理错误。

当然,更好的方法是不要首先得到错误。

答案 1 :(得分:1)

这是互联网上的全部内容。基本思路是检查列的系统表INFORMATION_SCHEMA.COLUMNS。我假设“不存在”仅适用于列的名称。

http://snippets.dzone.com/posts/show/4663

http://www.genexbs.com/blog/gbs.php/2008/08/09/how-to-check-if-column-exists-in-mysql-t

答案 2 :(得分:1)

另一个直接的问题是告诉MySQL IGNORE 查询期间出现的任何问题。

ALTER IGNORE TABLE `surveytable` ADD COLUMN Survey_Name_Qualtrics VARCHAR(20);

答案 3 :(得分:0)

diagnonalbatman的回答对我不起作用;我尝试使用MySQL 5.7会抱怨语法错误。在早期版本的MySQL上可能运行良好,但该注释毕竟已有8年以上的历史。

经过反复试验,这是我最终得到的结果:

DELIMITER //
DROP PROCEDURE IF EXISTS addColumn //
CREATE PROCEDURE addColumn()
BEGIN
  IF NOT EXISTS (
    SELECT *
    FROM information_schema.COLUMNS
    WHERE COLUMN_NAME = 'column_name'
      AND TABLE_NAME = 'table_name'
      AND TABLE_SCHEMA = DATABASE()
  ) THEN
    ALTER TABLE `table_name`
    ADD COLUMN `column_name` bigint(20) UNSIGNED NOT NULL DEFAULT 1;
  END IF;
END //
DELIMITER ;
CALL addColumn;
DROP PROCEDURE addColumn;