【mysql】删除mysql中重复元素的方法

方法一:建一张空表,然后加上唯一索引,将老数据用insert ignore语法插入到新表中,遇到冲突则抛弃数据。
CREATE TABLE clean LIKE pst_nw;
ALTER IGNORE TABLE clean ADD UNIQUE INDEX (add1, add2, add3, add4);
INSERT IGNORE INTO clean SELECT * FROM pst_nw;
DROP TABLE pst_nw;
RENAME TABLE clean pst_nw;

说明:

  • “alter ignore add unique index”的行为类似于insert ignore,即遇到冲突的unique数据则直接抛弃而不报错。备注:这里因为是空表,所以不用ignore也行。
  • “Insert ignore into xxx”'

本方案的好处是,您可以在删除源表之前验证新表是正确的。缺点是它占用两倍的空间,而且执行起来(相对)比较慢;此外它不适用于innodb。

方法二:对于方案一种创建临时表和拷贝源数据的操作,mysql提供了old_alter_table选项来支持。
set session old_alter_table=on;
ALTER IGNORE TABLE pst_nw ADD UNIQUE INDEX (add1, add2, add3, add4);

实践:

show variables like  'old_alter_table';
set session old_alter_table=1;
ALTER IGNORE TABLE live_plan_tab ADD UNIQUE INDEX idx_uid_stime(uid,start_time);
set session old_alter_table=0;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容