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;
答案 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。