2011-10-14 25 views
1

我正在尝试为软件程序编写更新mysql语句。目前这就是我对该陈述的看法,但我现在不知道如何添加多列来更新。用于添加多列的mysql语句是否存在

此代码当前添加列是否存在或不存在。


/*delimiter '//' 
CREATE PROCEDURE addcol() BEGIN 
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS 
WHERE COLUMN_NAME=`top_status` AND TABLE_NAME='categories' 
) 
THEN 
ALTER TABLE `categories` 
ADD COLUMN `top_status` tinyint(1) NOT NULL default '1'; 
END IF; 
END; 
delimiter ';' 
CALL addcol(); 
DROP PROCEDURE addcol;*/ 

有人能为我提供正确的语句来得到这样的工作...即。 WHERE COLUMN_NAME = column1,column2等。

我试过各种各样的变化,并且所有的变化都会在phpmyadmin中返回一个错误,除了上述情况。

回答

0

当然,您希望单独测试新列的存在,并且如果它们不存在,则单独添加每个列?

如果你想INFORMATION_SCHEMA查询,测试的存在列的任何 COLUMN1,列2等,你可以使用一个IN声明。如果要测试它们是否存在全部,则可以使用IN,而不是检查结果集是否为空,请选择COUNT(*)并检查返回的计数是否为预期数量(涉及的列数)。

+0

是我的方法,即使这样做的正确方法?我想要做的是设置一个声明,我可以使用许多不同的数据库,这些数据库在不同版本的数据/列上过时。一些数据库有列,有些没有,有些拥有所有最新的列。但我只想要一个语句对每个数据库运行基本上使所有数据库的相同和最新的版本。那么,这是最好的方法还是有更好的方法?另外,下面是你要添加你的语句的方式吗? – sven30

+0

/*分隔符 '//' CREATE PROCEDURE ADDCOL()BEGIN IF NOT EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME IN('top_status, '类别')AND TABLE_NAME = '类别' ) THEN ALTER TABLE'categories' ADD COLUMN('top_status' tinyint(1)NOT NULL默认'1','categories' tinyint(1)NOT NULL默认'1'); END IF; END; 定界符';' CALL addcol(); 删除程序addcol; */ 这不工作顺便说一句。 – sven30

+0

这不是'ALTER TABLE'的正确语法;正确的语法是'ALTER TABLE categories ADD TAMLIN top_status tinyint(1)NOT NULL默认'1',ADD COLUMN分类tinyint(1)NOT NULL默认'1'' – Hammerite

5

使用ALTER TABLE语句多列添加到表格:

ALTER TABLE TableName 
ADD (column1 col_definition, 
column2 col_definition, 
column3 col_definition, 
....  ...... 
....  ...... 
columnN col_definition); 
相关问题