mysql批量删除数据的存储过程怎么写

时间:2022-03-03 22:16:58
批量删除100万数据,删除一万行数据提交一次。
 如有A、B表,A、B表数据id相同,根据id删除A表的数据.这个怎么修理?

7 个解决方案

#1


 如有A、B表,A、B表数据id相同,根据id删除A表的数据.这个怎么修理?
delete a from a inner join b on a.id=b.id

#2


---表的连接查询
DELETE FROM a
INNER JONN b
ON a.id=b.id

#3


想嵌入到存储过程,批量删除 一万行提交一次。数据量很大。。都有一百多万!
是不是占用CPU、I、O很高 

#4


大量数据会有这个问题,甚至会导致你的回滚段不足。
一般是用游标处理。

对B表打开游标,然后逐个删除A表中ID对应的记录。每删除一个提交一次。

#5


DELIMITER $$

DROP PROCEDURE IF EXISTS 'delrows'$$

CREATE PROCEDURE delrows()
BEGIN 
DECLARE  rn int default 0;

SELECT count(*) into rn FROM a u,b p WHERE p.userid=u.userid;

WHILE (rn >=0) DO

DELETE FROM  a WHERE userid IN ( SELECT userid FROM B WHERE a.id=b.id limit 10000);
SET rn=rn-10000;
commit;

END WHILE;

END
$$
DELIMITER ;



这样对不?

#6


mysql> call delrows();
ERROR 1305 (42000): PROCEDURE china.delrows does not exist
mysql> call delrows(tmp_lastip25,tmp_lastip);
ERROR 1305 (42000): PROCEDURE china.delrows does not exist


在调用时报错。。。

#7


引用 6 楼 ha00012 的回复:
mysql> call delrows();
ERROR 1305 (42000): PROCEDURE china.delrows does not exist
mysql> call delrows(tmp_lastip25,tmp_lastip);
ERROR 1305 (42000): PROCEDURE china.delrows does not exist


在调用时报……

这个提示很明显了。这个库里没有这个存储过程,你把存储过程创建到别的库去了。

#1


 如有A、B表,A、B表数据id相同,根据id删除A表的数据.这个怎么修理?
delete a from a inner join b on a.id=b.id

#2


---表的连接查询
DELETE FROM a
INNER JONN b
ON a.id=b.id

#3


想嵌入到存储过程,批量删除 一万行提交一次。数据量很大。。都有一百多万!
是不是占用CPU、I、O很高 

#4


大量数据会有这个问题,甚至会导致你的回滚段不足。
一般是用游标处理。

对B表打开游标,然后逐个删除A表中ID对应的记录。每删除一个提交一次。

#5


DELIMITER $$

DROP PROCEDURE IF EXISTS 'delrows'$$

CREATE PROCEDURE delrows()
BEGIN 
DECLARE  rn int default 0;

SELECT count(*) into rn FROM a u,b p WHERE p.userid=u.userid;

WHILE (rn >=0) DO

DELETE FROM  a WHERE userid IN ( SELECT userid FROM B WHERE a.id=b.id limit 10000);
SET rn=rn-10000;
commit;

END WHILE;

END
$$
DELIMITER ;



这样对不?

#6


mysql> call delrows();
ERROR 1305 (42000): PROCEDURE china.delrows does not exist
mysql> call delrows(tmp_lastip25,tmp_lastip);
ERROR 1305 (42000): PROCEDURE china.delrows does not exist


在调用时报错。。。

#7


引用 6 楼 ha00012 的回复:
mysql> call delrows();
ERROR 1305 (42000): PROCEDURE china.delrows does not exist
mysql> call delrows(tmp_lastip25,tmp_lastip);
ERROR 1305 (42000): PROCEDURE china.delrows does not exist


在调用时报……

这个提示很明显了。这个库里没有这个存储过程,你把存储过程创建到别的库去了。