2010-06-08 20 views
16

一位選秀節目create table命令顯示以下內容:如何從MySQL的列中刪除'NOT NULL'?

'columnA' varchar(6) NOT NULL DEFAULT ''; 

,以便不爲空被刪除如何修改列? 我需要它是:

'columnA' varchar(6) DEFAULT NULL; 

我想下面的工作,但它沒有任何效果:

ALTER TABLE tbl_name MODIFY columnA varchar(6) DEFAULT NULL; 

回答

21

試試這個:

ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 
+0

沒有什麼區別。 – Will 2010-06-08 20:16:10

+1

@Will:5.1.35對我有用 - 你得到什麼錯誤? – 2010-06-08 20:34:34

+0

沒有錯誤。查詢OK,0行受到影響。 0條記錄,0條重複記錄,0條警告。 – Will 2010-06-09 12:20:51

2

進行更改(本地)在phpMyAdmin中。它將顯示它用於更改的查詢。在生產中執行此查詢,您就完成了。

您可以在任何GUI工具中使用此策略來查看它執行的查詢。我個人使用Sequel Pro (for Mac OS X)而不是phpMyAdmin。

+1

這個問題沒有包含任何與phpMyAdmin相關的上下文。 – Knubo 2012-04-04 05:03:16

+0

@Knubo是的,但我的「答案」包含一個策略,使用GUI生成ALTER TABLE語句。 – 2012-04-04 10:49:19

4

通常情況下,Eric的回答應該工作:

ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 

(雖然 'NULL DEFAULT NULL' 部分是可選的)。

但是和你一樣,我遇到了一個沒有做任何事就返回OK的情況。在我看來,這似乎是由於我的鑰匙是主鑰匙的一部分。所以我必須做到以下幾點:

ALTER TABLE tbl_name DROP PRIMARY KEY; 
ALTER TABLE tbl_name MODIFY columnA varchar(6); 
ALTER TABLE tbl_name ADD PRIMARY KEY (columnA); 

與最後一個查詢指定任何您的主鍵實際上是。

此外,如果有人認爲,過於冗長,以下綜合查詢不起作用,即使它應該是相同的:

ALTER TABLE tbl_name DROP PRIMARY KEY, MODIFY columnA varchar(6), ADD PRIMARY KEY (columnA); 

我認爲MySQL的重寫,去年查詢到一個不同的順序,以便在執行修改時主鍵仍然存在,因此需要將其分解爲三個語句。

僅供參考,這是在MySQL 5.1.47,但我還沒有找到任何文件指出爲什麼發生這種情況,所以我不知道哪些版本受到影響。