如果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;