场景:
需要删除数据库中的数据,并且只保留500条。
之前可以用两条sql语句,先查询当前表有多少条数据,然后计算需要删除的数据,在用limit删除指定的数据。
两种方法
第一种方法
一、先查询表中数据
SELECT COUNT(1) FROM your_table;
二、删除指定的数据。 3411550是第一步查询的数据-保留的数据。
DELETE FROM your_table LIMIT 3411550;
第一种方法
----------------------------使用not in,保留一定的数据---------------------------
一、删除数据之前,可以用in查询,查询5042499条数据是否正常,因为delete删除之后容易造成数据的误删。
SELECT count(*) FROM `wfc_process` WHERE ID IN (SELECT s.ID FROM (SELECT ID FROM `wfc_process` LIMIT 0,500) AS s);
二、使用not in,保留5042499条数据,删除不在这5042499以内的数据。
DELETE FROM your_table
WHERE ID NOT IN (
SELECT s.ID FROM (
SELECT ID FROM `wfc_process` LIMIT 0,5042499) AS s);
存在的问题:
使用
DELETE FROM your_table
WHERE id NOT IN (
SELECT id FROM your_table ORDER BY id DESC LIMIT 500
);
存在This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery',limit不能使用在in中,只能通过as多加一层。