2012-10-13 94 views
-1

我正在閱讀django的權威指南,還有一行我必須告訴mySQL一列可以有一個空值。mySQL DROP NOT NULL無法正常工作

書中使用這個

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL; 

但是當我運行它,我得到這個消息:

ERROR 1064(42000):你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法 在1號線

使用近「NOT NULL」這是怎麼回事的 手冊?我是初學者,所以我不能輕易診斷mySQL錯誤。

+0

http://stackoverflow.com/questions/212939/how-do-i-modify-a-mysql-column-to-allow-空值 – Vikdor

回答

1

只能將DROP與列名稱,索引名稱和約束名稱一起使用,但不能與數據上的條件一起使用。我不認爲NOT NULL是一個命名約束,因此是錯誤。

您不能使用ALTER COLUMN刪除列的NOT NULL定義,而是使用DROP DEFAULT

例子

ALTER TABLE books_book ALTER COLUMN publication_date DROP DEFAULT; 
ALTER TABLE books_book ALTER COLUMN publication_date SET DEFAULT TODAY(); 

如果您正在尋找去除塔上的NOT NULL定義,你應該使用MODIFYCHANGE語法與ALTER TABLE

例子

ALTER TABLE books_book MODIFY COLUMN publication_date DATE NULL; 
ALTER TABLE books_book CHANGE COLUMN publication_date new_name DATE NULL; 

參見要ALTER TABLE Syntax

1

是的,這個語法是錯誤的。

如果您只想讓列有時包含空值,那麼它已經是默認行爲。

檢查,如果你的表定義禁止空值與

show create table 

如果它不是默認的行爲,你會看到獨特和/或NOT NULL約束。

0

最簡約的正確的語法是:

ALTER TABLE books_book ALTER COLUMN publication_date column_type NULL; 

更換COLUMN_TYPE當前類型publication_date的,如果您有任何其他說明符該列,你應該在這些添加爲好。假設它是顧名思義日期:

ALTER TABLE books_book ALTER COLUMN publication_date DATE NULL; 

你可以看到通過導出表(或@mbarthelemy建議用show create table books_book;)如何使用mysqldump或從管理界面重新列,得到了語法創建從那裏的列並在alter table中使用它,但將NULL替換爲NULL。

0

這一個工作完全正常的MySQL 5.5

ALTER TABLE books_book CHANGE publication_date publication_date DATE;