如何删除ALTER重复修改后的冗余信息

Lamuna 2014-09-22 12:04:22
创表初期,我新建user表,其中username只是设置了char(16) NOT NULL
后来通过ALTER user MODIFY username char(16) UNIQUE设置成了唯一
然后发现username的NOT NULL条件消失了,于是我又通过ALTER user MODIFY username char(16) NOT NULL UNIQUE设置成了非空不重复的条件


一切似乎都完美解决....
但是通过SHOW CREATE TABLE user;的时候,里面却出现了两条username的条件:
一个是username NOT NULL
另一个是username_2 NOT NULL UNIQUE


通过mysqldump导出的创建信息也依旧是有username_2这个定义……


请问我该如何删除这种冗余的信息?总不能全局替换掉吧?如果一个库里有数百甚至更多个表面临不必要的修改,那岂不是要死的节奏?……


求解
...全文
137 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhu19774279 2014-09-22
  • 打赏
  • 举报
回复
我用的5.5,InnoDB引擎,照你的描述,alter unique以后,NOT NULL并没有丢失,你往表里插数据试过了吗? 另外,额外生成的username_2就是一个索引,删掉即可ALTER TABLE user DROP INDEX username_2;
ACMAIN_CHM 2014-09-22
  • 打赏
  • 举报
回复
没有办法,如果你是通过两次 ALTER table user MODIFY username char(16) NOT NULL UNIQUE; 来实现,则实际上创建了两次 unique的约束。 你可以一次性show table 列出表名,然后通过EXCEL生成 drop index `username_2` on user; ,然后一次性贴入MYSQL执行。 也可以通过 select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where ... 得到所有相关约束名。然后进行EXCEL处理删除。
Lamuna 2014-09-22
  • 打赏
  • 举报
回复
总之,非常感谢,这个问题解决了^_^
Lamuna 2014-09-22
  • 打赏
  • 举报
回复
Not null之所以丢失是因为alter modify中定义的内容是被覆盖修改的,比如你这次没有not null就不会被定义下去……
zhu19774279 2014-09-22
  • 打赏
  • 举报
回复
引用 2 楼 Lamuna 的回复:
[quote=引用 1 楼 zhu19774279 的回复:] 我用的5.5,InnoDB引擎,照你的描述,alter unique以后,NOT NULL并没有丢失,你往表里插数据试过了吗? 另外,额外生成的username_2就是一个索引,删掉即可ALTER TABLE user DROP INDEX username_2;
我的引擎好像是MyISAM的……不是说InnoDB的执行速度比MyISAM慢一些么?[/quote] 先插个数据确认一下,是不是加了unique以后,not null丢失(理论上不应该,这两个并没有什么关联) 两种引擎都有各自的优缺点,就像寸有所长尺有所短,快慢不是绝对的,要看场合
Lamuna 2014-09-22
  • 打赏
  • 举报
回复
引用 1 楼 zhu19774279 的回复:
我用的5.5,InnoDB引擎,照你的描述,alter unique以后,NOT NULL并没有丢失,你往表里插数据试过了吗? 另外,额外生成的username_2就是一个索引,删掉即可ALTER TABLE user DROP INDEX username_2;
我的引擎好像是MyISAM的……不是说InnoDB的执行速度比MyISAM慢一些么?

56,941

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧