insert ignore into mytable(id, name) values(2, 'jim')但是ignore这种方法是在表已经定义了主键的情况下才会生效,如果表中没有定义主键,那么还是可以插入重复记录的。
但既然已经插入了重复记录,那么现在面临的问题就是如何删除已经插入的重复记录,在搜索之后,发现了一个不错的方法,那就是添加唯一性索引,方法如下:
alter ignore table mytable add unique index indexname(name)在这条命令中,indexname是索引的名字,name是用于建立索引的字段。
注意,如果你的表使用的InnoDB引擎,那么这条语句还是会出错,提示有某条重复的记录。所以,我们需要把表冲InnoDB改成MyISAM,执行完后再改回来就OK了。
代码:
ALTER TABLE table ENGINE MyISAM; alter ignore table mytable add unique index indexname(name) ALTER TABLE table ENGINE InnoDB;执行完,你再查看表中的数据,就可以看到重复记录已经被删掉了。
但是,还有一个问题就是,当你使用desc mytable命令时,发现name字段后面竟然变成了主键!但是唯一性索引和主键并不是等同的啊。
关于这个问题,你可以参考这个文章。
参考:http://stackoverflow.com/questions/8053447/mysql-alter-ignore-table-gives-integrity-constraint-violation
没有评论:
发表评论