+ -
当前位置:首页 → 问答吧 → 大数据量排序情况下,如何delete之前已经select的内容?

大数据量排序情况下,如何delete之前已经select的内容?

时间:2011-10-31

来源:互联网

我有个表t,含a,b,c,d四个字段,无主外键、约束关系等,但数据量很大,每次操作只能排序后操作一部分,比如 select * from t order by t.a asc limit 200 offset 1000,然后,我想删除这次选择出来的这200条记录,如何实现呢?

作者: BlueEngine   发布时间: 2011-10-31

delete from t order by t.a asc limit 200 offset 1000

作者: ACMAIN_CHM   发布时间: 2011-10-31

这样试过,不行啊,语法错误:
********** 错误 **********
错误: 语法错误 在 "order" 或附近的
并且,即使能行的话,也只能是大致正确,不能保证delete的完全就是select出来的内容。

作者: BlueEngine   发布时间: 2011-10-31

哦,DELETE中只能 

delete from t order by t.a asc limit 1000

作者: ACMAIN_CHM   发布时间: 2011-10-31

试一下
delete a from t a,(select * from t order by t.a asc limit 200 offset 1000) b where a.id=b.id

作者: ACMAIN_CHM   发布时间: 2011-10-31

本身这200条数据就不是唯一固定的 因为按照a排序之后 插入了一些数据 再按照a排序结果集就变了 所以应该在表上加一个自增列 是唯一的标识每一行 

作者: rucypli   发布时间: 2011-10-31

未明白,求解释。

作者: BlueEngine   发布时间: 2011-10-31

自增字段是个解,但现在表字段固定了,所以只能是以后再采用了。

作者: BlueEngine   发布时间: 2011-10-31

解释一下背景:
定期检测表t的内容,只保留预先定义的容量,对于超过容量的部分则导出到文件中(通过copy 排序后的表内容 to file),同时在数据库表中删除掉导出的记录,但不允许丢失记录。

作者: BlueEngine   发布时间: 2011-11-01

相关阅读 更多

热门下载

更多