-1

我正在阅读 django 的权威指南,并且有一行我必须告诉 mySQL 列可以具有空值。

本书使用这个

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

但是当我运行它时,我会收到以下消息:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“NOT NULL”附近使用正确的语法

这是怎么回事 ?我是初学者,所以我无法轻松诊断 mySQL 错误。

4

4 回答 4

1

是的,这个语法是错误的。

如果您只想允许列有时包含空值,那么它已经是默认行为。

检查您的表定义是否禁止空值

show create table

如果它没有默认行为,您将看到 UNIQUE 和/或 NOT NULL 约束。

于 2012-10-13T13:40:11.433 回答
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列上的定义,您应该使用MODIFYorCHANGE语法 with 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 语法

于 2012-10-13T13:51:23.690 回答
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;

您可以看到如何使用 mysqldump 或通过导出表(或 @mbarthelemy 建议的那样show create table books_book;)从管理界面重新创建列,从那里获取创建列的语法并在 中使用它alter table,但将 NOT NULL 替换为 NULL。

于 2012-10-13T13:47:28.630 回答
0

这对于 MySQL 5.5 非常有效

ALTER TABLE books_book CHANGE publication_date publication_date DATE;

于 2013-05-06T10:31:45.263 回答