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>
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>
Subkueri bersarang adalah penting. Tanpanya, anda akan menghadapi ralat seperti:
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!