我在MySQL中有一个名为word的只插入表。一旦行数超过1000000,我想删除表的前100000行。
我在python中使用mysqldb,所以我有一个全局变量:
wordcount = cursor.execute("select * from word")
将返回python环境中表中的行数。每次插入新行时,我都会将wordcount增加1。然后我检查行数是否大于1000000,如果是,我想删除前100000行:
if wordcount > 1000000:
cursor.execute("delete from word limit 100000")
我从这个帖子中得到了这个想法: Delete first X lines of a database
但是,这个SQL结束了删除我的ENTIRE表,我在这里缺少什么?
谢谢。
答案 0 :(得分:0)
我认为这不是获得行数的正确方法。您需要将语句更改为count(*)
然后使用MySQLs cursor.fetchone()来获取结果的元组,其中第一个位置(有点像wordcount = cursor.fetchone()[0]
)将具有正确的行数
你的删除声明看起来是正确的,也许你有明确的交易?在这种情况下,您必须在删除后调用db对象上的commit()
。
答案 1 :(得分:0)
如果您的表“word”具有ID字段(键auto_increment字段),您可以编写一些删除前100000行的存储过程。存储过程的关键部分是:
drop temporary table if exists tt_ids;
create temporary table tt_ids (id int not null);
insert into tt_ids -- taking first 100000 rows
select id from word
order by ID
limit 100000;
delete w
from word w
join tt_ids ids on w.ID = ids.ID;
drop temporary table if exists tt_ids;
此外,您可以在ID字段上的tt_ids上构建一些索引,以加快查询速度。