mysql刪除重復數據 刪除表內重復數據的一種解決方案: www.2cto.com Create Table: CREATE TABLE `tt` ( `id` int(11) DEFAULT NULL, `name` varchar(30) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 200萬的數據 100萬 id從1到100w name是zz 100條 id從1到100 name是zz 100萬 id從1到100w name是mike 100條 id從1到100 name是mike 存儲過程: 新增sizes+1條數據,name為params CREATE PROCEDURE pro_insert2(in sizes int,in params varchar(30)) begin declare i int; start transaction; set i = 0; while i<=sizes do insert into tt values(i,params); set i=i+1; end while; commit; end www.2cto.com mysql命令行操作:插入測試數據 call pro_insert2(1000000,'zz'); call pro_insert2(100,'zz'); call pro_insert2(1000000,'mike'); call pro_insert2(100,'mike'); mysql> select count(*) from tt; +----------+ | count(*) | +----------+ | 2000204 | +----------+ 1 row in set (0.00 sec) Create Table: CREATE TABLE `tt2` ( `id` int(11) DEFAULT NULL, `name` varchar(30) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> insert into tt2 (select distinct * from tt); Query OK, 2000002 rows affected (51.55 sec) Records: 2000002 Duplicates: 0 Warnings: 0 mysql> drop table tt; Query OK, 0 rows affected (0.10 sec) mysql> alter table tt2 rename tt; Query OK, 0 rows affected (0.09 sec) mysql> select count(*) from tt; +----------+ | count(*) | +----------+ | 2000002 | +----------+ 1 row in set (2.54 sec) 到此OK,這種方法效率不是很高,期待更有效率的方法.