Rumah > pangkalan data > tutorial mysql > Bagaimana dengan Cekap Memadam Semua kecuali N Rekod Terkini dalam MySQL?

Bagaimana dengan Cekap Memadam Semua kecuali N Rekod Terkini dalam MySQL?

Mary-Kate Olsen
Lepaskan: 2025-01-08 16:17:41
asal
394 orang telah melayarinya

How to Efficiently Delete All but the N Most Recent Records in MySQL?

MySQL: Mengalih Keluar Semua Tetapi N Entri Terkini

Pengurusan pangkalan data selalunya memerlukan mengalih keluar rekod yang lebih lama sambil mengekalkan yang paling terkini. Ini boleh dicapai dalam MySQL menggunakan pertanyaan SQL yang bijak tanpa bergantung pada pembolehubah.

Percubaan biasa, tetapi cacat, ialah:

<code class="language-sql">DELETE FROM table ORDER BY id ASC LIMIT ((SELECT COUNT(*) FROM table) - N);</code>
Salin selepas log masuk

Pendekatan ini gagal kerana pengehadan dalam pernyataan DELETE MySQL.

Penyelesaian teguh melibatkan subkueri bersarang:

<code class="language-sql">DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT 42 -- Replace 42 with the number of records to keep (N)
  ) as recent_records
);</code>
Salin selepas log masuk

Subkueri bersarang adalah penting. Tanpanya, anda akan menghadapi ralat seperti:

  • Ralat SQL (1093): Anda tidak boleh mengubah suai jadual yang anda pilih daripada dalam pertanyaan yang sama.
  • Ralat SQL (1235): Menggunakan LIMIT terus dalam NOT IN subquery adalah dilarang.

Pertanyaan berstruktur ini dengan cekap memintas sekatan ini, berjaya memadamkan semua kecuali bilangan rekod terkini yang ditentukan (ditakrifkan oleh klausa LIMIT). Ingat untuk menggantikan 42 dengan nilai N yang anda inginkan.

Atas ialah kandungan terperinci Bagaimana dengan Cekap Memadam Semua kecuali N Rekod Terkini dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan