如有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
delete a from a inner join b on a.id=b.id
#2
---表的连接查询
DELETE FROM a
INNER JONN b
ON a.id=b.id
DELETE FROM a
INNER JONN b
ON a.id=b.id
#3
想嵌入到存储过程,批量删除 一万行提交一次。数据量很大。。都有一百多万!
是不是占用CPU、I、O很高
是不是占用CPU、I、O很高
#4
大量数据会有这个问题,甚至会导致你的回滚段不足。
一般是用游标处理。
对B表打开游标,然后逐个删除A表中ID对应的记录。每删除一个提交一次。
一般是用游标处理。
对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 ;
这样对不?
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
在调用时报错。。。
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
这个提示很明显了。这个库里没有这个存储过程,你把存储过程创建到别的库去了。
#1
如有A、B表,A、B表数据id相同,根据id删除A表的数据.这个怎么修理?
delete a from a inner join b on a.id=b.id
delete a from a inner join b on a.id=b.id
#2
---表的连接查询
DELETE FROM a
INNER JONN b
ON a.id=b.id
DELETE FROM a
INNER JONN b
ON a.id=b.id
#3
想嵌入到存储过程,批量删除 一万行提交一次。数据量很大。。都有一百多万!
是不是占用CPU、I、O很高
是不是占用CPU、I、O很高
#4
大量数据会有这个问题,甚至会导致你的回滚段不足。
一般是用游标处理。
对B表打开游标,然后逐个删除A表中ID对应的记录。每删除一个提交一次。
一般是用游标处理。
对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 ;
这样对不?
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
在调用时报错。。。
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
这个提示很明显了。这个库里没有这个存储过程,你把存储过程创建到别的库去了。