mySQL DROP NOT NULL不起作用

时间:2012-10-13 13:25:14

标签: mysql django mysql-error-1064

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

这本书使用了这个

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

但是当我运行它时,我收到了这条消息:

  

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

发生了什么事?我是初学者,所以我无法轻易诊断mySQL错误。

4 个答案:

答案 0 :(得分:1)

是的,这种语法错了。

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

检查您的表定义是否禁止带

的空值
show create table

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

答案 1 :(得分:1)

您只能将DROP与列名,索引名和约束名一起使用,但不能在数据上使用 condition 。我认为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

答案 2 :(得分: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重新创建列,或者通过导出表(或者使用show create table books_book;建议的@mbarthelemy)从管理界面重新创建列,获取从那里创建列的语法并在其中使用它alter table,但用NULL替换NOT NULL。

答案 3 :(得分:0)

这个适用于MySQL 5.5

ALTER TABLE books_book CHANGE publication_date publication_date DATE;