Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果MySQL中不存在列,则添加列_Mysql_Sql_Alter Table - Fatal编程技术网

如果MySQL中不存在列,则添加列

如果MySQL中不存在列,则添加列,mysql,sql,alter-table,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); 这是我使用的代码,如果ALTER列上不存在,我认为您不能使用 另一种方法是,如果您试图插入一个已经存在的列,那么您可以

我觉得这很简单,但我只在这些列不存在的情况下尝试运行此命令:

ALTER TABLE `surveytable` ADD IF NOT EXISTS  Survey_Name_Qualtrics VARCHAR(20);
ALTER TABLE `surveytable` ADD IF NOT EXISTS Survey_URL_Qualtrics VARCHAR(600);
这是我使用的代码,如果ALTER列上不存在,我认为您不能使用

另一种方法是,如果您试图插入一个已经存在的列,那么您可以观察所得到的错误,我认为是1062。并处理错误


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

这在互联网上随处可见。基本思想是为您的列检查系统表
INFORMATION\u SCHEMA.COLUMNS
。我假设“none exists”只适用于列的名称


另一个直截了当的查询是告诉MySQL忽略查询过程中出现的任何问题

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

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;

如果你打算从另一个论坛复制答案,那么只需添加一个。当其他人链接到SO答案时,我也希望这样做。这不起作用,它仍然会产生错误@请看这里:
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;