重复记录
如果不设置唯一索引约束,很容易插入重复数据,例如表单重复提交。
id | url |
1 | www.a.com |
2 | www.a.com |
3 | www.a.com |
4 | www.b.com |
5 | www.b.com |
6 | www.c.com |
这时候就不可避免的要把重复记录删掉。
首先要查出来哪些是不重复的数据:
SELECT MIN(id) id FROM `tb` GROUP by
用GROUP BY
分组数据,并用MIN
查找分组记录中最新的id。
然后再用DELETE
删掉不在这里面的那些数据。
DELETE FROM tb WHERE id NOT IN (SELECT * FROM (SELECT MIN(id) id FROM `tb` GROUP by url) tb1)
报错
You can't specify target table `tb` for update in FROM clause
这是因为更新和查询不能同时进行,有死锁。
解决办法就是把查询结果放到临时表里。
DELETE FROM tb WHERE id NOT IN (SELECT * FROM (SELECT MIN(id) id FROM `tb` GROUP by url) tb1)
id | url |
1 | www.a.com |
4 | www.b.com |
6 | www.c.com |