【问题标题】:ADD column if none exists in MySQL如果 MySQL 中不存在,则添加列
【发布时间】:2011-02-21 18:14:20
【问题描述】:

我认为这很容易,但我仅在这些列不存在时才尝试运行此命令:

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

【问题讨论】:

标签: mysql sql alter-table


【解决方案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。并处理错误。

当然更好的方法是一开始就不要出错。

【讨论】:

  • 如果您要复制其他论坛的答案,唯一的权利是添加link to it。当其他人链接到 SO 答案时,我也希望这样做。
【解决方案2】:

这在互联网上无处不在。基本思想是为您的列检查系统表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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    【解决方案4】:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-02
      • 2019-03-12
      • 2010-11-01
      • 1970-01-01
      • 2013-01-01
      • 2011-04-24
      • 2017-06-21
      相关资源
      最近更新 更多