【问题标题】:mySQL DROP NOT NULL not working [closed]mySQL DROP NOT NULL 不起作用[关闭]
【发布时间】:2012-10-04 02:56:51
【问题描述】:

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

本书使用了这个

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

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

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

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

【问题讨论】:

标签: mysql django mysql-error-1064


【解决方案1】:

这个对于 MySQL 5.5 非常有效

ALTER TABLE books_book CHANGE publication_date publication_date DATE;

【讨论】:

    【解决方案2】:

    最简约的正确语法是:

    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;),从那里获取创建列的语法并在 @987654324 中使用它@,但将 NOT NULL 替换为 NULL。

    【讨论】:

      【解决方案3】:

      您只能将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

      【讨论】:

        【解决方案4】:

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

        如果您只想让列有时包含空值,那么这已经是默认行为了。

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

        show create table
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-17
          • 2014-01-10
          • 1970-01-01
          • 1970-01-01
          • 2013-02-04
          • 2023-02-02
          • 2014-06-25
          相关资源
          最近更新 更多