代码之家  ›  专栏  ›  技术社区  ›  Will

如何从MySQL的列中删除“not null”?

  •  18
  • Will  · 技术社区  · 15 年前

    “显示创建表”命令显示以下内容:

    'columnA' varchar(6) NOT NULL DEFAULT '';
    

    如何修改该列以删除非空值? 我需要的是:

    'columnA' varchar(6) DEFAULT NULL;
    

    我原以为以下方法可行,但没有效果:

    ALTER TABLE tbl_name MODIFY columnA varchar(6) DEFAULT NULL;
    
    3 回复  |  直到 10 年前
        1
  •  24
  •   Eric Petroelje    15 年前

    试试这个:

    ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 
    
        2
  •  4
  •   Rob Van Dam    14 年前

    通常情况下,Eric的回答应该有效:

    ALTER TABLE tbl_name MODIFY columnA varchar(6) NULL DEFAULT NULL; 
    

    (尽管“空默认空”部分是可选的)。

    但像你一样,我也有一个案子没做任何事就完结了。在我的例子中,这似乎是由于我的密钥是主密钥的一部分。所以我必须做以下工作:

    ALTER TABLE tbl_name DROP PRIMARY KEY;
    ALTER TABLE tbl_name MODIFY columnA varchar(6);
    ALTER TABLE tbl_name ADD PRIMARY KEY (columnA);
    

    最后一个查询指定了您的主键实际上是什么。

    另外,如果有人认为这太冗长,那么下面的组合查询就不起作用,即使它应该是相同的:

    ALTER TABLE tbl_name DROP PRIMARY KEY, MODIFY columnA varchar(6), ADD PRIMARY KEY (columnA);
    

    我假设MySQL将最后一个查询重写为不同的顺序,这样在执行修改时主键仍然存在,因此需要将其分解为三个语句。

    仅供参考,这是在MySQL5.1.47上的,但是我还没有找到任何说明为什么会发生这种情况的文档,所以我不知道哪些版本会受到影响。

        3
  •  2
  •   halfer    10 年前

    在phpmyadmin中进行(本地)更改。它将显示用于更改的查询。在生产环境中执行这个查询,您就完成了。

    您可以在任何GUI工具中使用此策略来查看它执行的查询。我个人使用 Sequel Pro (for Mac OS X) 而不是phpmyadmin。