我认为这很容易,但我只是在那些列已经不存在的情况下才尝试运行此命令:
ALTER TABLE `surveytable` ADD IF NOT EXISTS Survey_Name_Qualtrics VARCHAR(20);
ALTER TABLE `surveytable` ADD IF NOT EXISTS Survey_URL_Qualtrics VARCHAR(600);
答案 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;