我用的5.5,InnoDB引擎,照你的描述,alter unique以后,NOT NULL并没有丢失,你往表里插数据试过了吗?
另外,额外生成的username_2就是一个索引,删掉即可ALTER TABLE user DROP INDEX username_2;

解决方案 »

  1.   


    我的引擎好像是MyISAM的……不是说InnoDB的执行速度比MyISAM慢一些么?
      

  2.   


    我的引擎好像是MyISAM的……不是说InnoDB的执行速度比MyISAM慢一些么?
    先插个数据确认一下,是不是加了unique以后,not null丢失(理论上不应该,这两个并没有什么关联)
    两种引擎都有各自的优缺点,就像寸有所长尺有所短,快慢不是绝对的,要看场合
      

  3.   

    Not null之所以丢失是因为alter modify中定义的内容是被覆盖修改的,比如你这次没有not null就不会被定义下去……
      

  4.   

    没有办法,如果你是通过两次  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处理删除。