首页  >  文章  >  数据库  >  如何在MySQL中有限制地按降序删除特定数量的行?

如何在MySQL中有限制地按降序删除特定数量的行?

DDD
DDD原创
2024-10-28 11:54:41502浏览

How to Delete a Specific Number of Rows in Descending Order in MySQL with Restrictions?

在 MySQL 中删除有限制的行

本题探讨了 MySQL 中 DELETE 语句与 LIMIT 子句的用法。用户尝试按时间戳列降序删除指定数量的行。但是,查询失败并出现语法错误。

出现该错误的原因是 MySQL 不允许在 DELETE 语句的 LIMIT 子句中使用偏移量。因此,查询无法按预期执行。

要解决此问题,可以使用不同的方法重写查询。重写的查询使用嵌套子查询根据所需范围选择要删除的行。

DELETE FROM `chat_messages` 
WHERE `id` IN (
    SELECT `id` FROM (
        SELECT `id` FROM `chat_messages`
        ORDER BY `timestamp` DESC
        LIMIT 20, 50
    ) AS `x`
)

在此修改后的查询中,嵌套子查询选择要删除的行的 id 值。 LIMIT 子句应用于最里面的子查询以限制结果集。

由于 MySQL 禁止从当前修改的表中进行选择,因此查询使用双重嵌套来解决此限制。外部子查询充当临时表,允许最内部的子查询从单独的结果集中选择 id 值。

通过实现此技术,查询可以成功删除指定范围内的行,同时遵守 MySQL 的语法要求.

以上是如何在MySQL中有限制地按降序删除特定数量的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn