【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;

你可能感兴趣的:(【mysql】删除mysql中重复元素的方法)