2014-03-04 53 views
4

我想一個新的列添加到mysql的表中添加列,但我想忽略列的增加,如果列已經存在,我目前使用的阿爾特忽略表,如果不存在使用SQL語句

ALTER IGNORE TABLE `db`.`tablename` ADD COLUMN `column_name` text NULL; 

但這是拋出一個錯誤說:"ERROR 1060 (42S21): Duplicate column name 'column_name'"

即使我現在用的是不理會,這是行不通的

我希望這個使用正常的SQL語句的工作,而不是存儲過程

回答

3

按照documentation

忽視的是一個MySQL擴展到標準SQL。它控制如果ALTER TABLE在新表中的唯一鍵上有重複項,或者如果在嚴格模式啓用時發生警告,則會如何工作。如果指定IGNORE不是 ,則複製將被中止並回滾,如果出現重複鍵錯誤 。如果指定IGNORE,則只有一行用於在唯一密鑰上使用 重複的行。其他衝突的行被刪除。 不正確的值被截斷爲最接近匹配的可接受的 值。

也就是說,它用於不同的目的,而不是所有的錯誤。你想要的是類似於ALTER TABLE ADD IF NOT EXISTS,並且該語法不存在。

在存儲過程中,可以使用if語句查看該列是否已存在(使用INFORMATION_SCHEMA.COLUMNS)。

Here是一個顯示相同問題的SQL小提琴。

+0

+1 Got that!感謝您糾正我! –