MySQL – 有效删除除N之外的所有记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL – 有效删除除N之外的所有记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1330字,纯文字阅读大概需要2分钟。
内容图文
![MySQL – 有效删除除N之外的所有记录](/upload/InfoBanner/zyjiaocheng/903/431fb3c24b514d518fe1b60bde725d8c.jpg)
我最近开始学习SQL,现在被要求在表上执行简单删除,保留每个用户的最后100条记录.我正在研究最好的方法(更有效的方法)来存档这个,并找到了一些可能的解决方案(SQL query: Delete all records from the table except latest N?,Delete all but top n from database table in SQL),但对我来说,选择一个基于效率的方法是错综复杂的.所以我来这里寻求你的帮助.
这是一个名为“access”的表,我们保留用户访问日志.
access:
- id (autoincrement) - primary
- userid (integer 11) - key
- refer (varchar 100)
- date (date/time)
我的想法是每次在同一用户进入系统时从用户ID中删除旧记录,就在插入新日志之前.
我试过这个代码但是有错误:这个版本的MySQL还不支持’LIMIT& IN / ALL / ANY / SOME子查询’
DELETE FROM
access
WHERE
id NOT IN (
SELECT id FROM access WHERE userid = 10 ORDER BY id DESC LIMIT 100
);
拜托,你能给我一些解决方案吗?谢谢!
解决方法:
尝试DELETE JOIN:
delete a from access a left join (
select id
from access
order by id desc limit 1000
) b on a.id = b.id
where b.id is null;
如果要保留给定用户(例如123)的前1000条记录,请执行以下操作:
delete a from access a left join (
select id
from access
where userid = 123
order by id desc limit 1000
) b on a.id = b.id
where b.id is null;
如果要仅为用户123删除行,除了该用户的前1000行:
delete a from access a left join (
select id
from access
where userid = 123
order by id desc limit 1000
) b on a.id = b.id
where b.id is null
and a.userid = 123;
内容总结
以上是互联网集市为您收集整理的MySQL – 有效删除除N之外的所有记录全部内容,希望文章能够帮你解决MySQL – 有效删除除N之外的所有记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。