2016-04-18 222 views
1

默認爲空值,我已經有一個表,簡化的例子:無法設置

CREATE TABLE t (c INT NOT NULL); 

,我需要列缺省值更改爲NULL,所以我嘗試:

ALTER TABLE t ALTER COLUMN c SET DEFAULT NULL; 

但我得到錯誤「錯誤代碼:1067。'c'的默認值無效。」 看起來很奇怪,因爲查詢符合官方文檔。

我甚至想:

ALTER TABLE t ALTER COLUMN c DROP DEFAULT; 

和之後做一個 'SET DEFAULT NULL' 查詢,但發生了同樣的錯誤。 有趣的是,這樣的查詢:

ALTER TABLE t ALTER COLUMN c SET DEFAULT 1; 

執行沒有錯誤。

我知道,這是可以使用列缺省值更改爲NULL在我的情況:

ALTER TABLE t MODIFY COLUMN c INT NULL; 

但此查詢是大表很慢(它會非常慢,不是像「SET查詢DEFAULT 1')

那麼,如何將默認值更改爲NULL?

我的意思是,沒有任何由'MODIFY COLUMN'命令引起的開銷。

詳細信息:MySQL x64版本5.7.10,Win8。使用MySQL Workbench進行測試。

+0

您已經創建了表不能爲空列「C」的唯一途徑,所以你不能做它默認爲NULL。沒有將列修改爲Nullable,恐怕你永遠不能將它設置爲NULL ..一旦你設置爲Nullable,當你在這個列中添加一個沒有值的新記錄時,它應該默認爲NULL。 – ydoow

回答

1

通過將列創建爲NOT NULL,您創建了一個CONSTRAINT - 聲明輸入該列的值可能永遠不會爲NULL。

默認值NULL(設置爲null時,值在INSERT期間不存在)將會創建無效數據。

由於黯然空約束是在MySQL的數據類型的一部分,以使列可爲空將

ALTER TABLE t MODIFY COLUMN c INT NULL;