首頁  >  文章  >  資料庫  >  如何在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