2011-10-14 22 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); 
相關問題