如何从MySQL中的列中删除“NOT NULL”?

时间:2010-06-08 20:10:55

标签: mysql alter-table

show create table命令显示以下内容:

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

如何修改该列以删除not null? 我需要它:

'columnA' varchar(6) DEFAULT NULL;

我认为以下内容可行,但没有效果:

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

3 个答案:

答案 0 :(得分:24)

请改为尝试:

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

答案 1 :(得分:4)

通常,Eric的答案应该有效:

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

(虽然'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将最后一个查询重写为不同的顺序,以便在执行修改时主键仍然存在,因此需要将其分解为三个语句。

仅供参考,这是在mysql 5.1.47上,但我还没有找到任何文件说明为什么会这样,所以我不知道哪些版本会受到影响。

答案 2 :(得分:2)

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

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