在 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中文網其他相關文章!