我正在阅读django的权威指南,并且我必须告诉mySQL一行可以有一个空值。
这本书使用了这个
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
但是当我运行它时,我收到了这条消息:
错误1064(42000):您的SQL语法有错误;检查 手册,对应右边的MySQL服务器版本 在第1行“NOT NULL”附近使用的语法
发生了什么事?我是初学者,所以我无法轻易诊断mySQL错误。
答案 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
定义,则应使用MODIFY
或CHANGE
语法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;