ホームページ >データベース >mysql チュートリアル >MySQL で最新の N レコードを除くすべてのレコードを効率的に削除するにはどうすればよいですか?
MySQL: N 個の最新エントリを除くすべてのエントリを削除
データベース管理では、最新のレコードを保持しながら古いレコードを削除する必要があることがよくあります。 これは、変数に依存せずに、賢い SQL クエリを使用して MySQL で実現できます。
よくある、しかし欠陥のある試みは次のとおりです:
<code class="language-sql">DELETE FROM table ORDER BY id ASC LIMIT ((SELECT COUNT(*) FROM table) - N);</code>
このアプローチは、MySQL の DELETE ステートメントの制限により失敗します。
堅牢なソリューションには、ネストされたサブクエリが含まれます。
<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>
ネストされたサブクエリは非常に重要です。 これがないと、次のようなエラーが発生します:
LIMIT
サブクエリ内で直接 NOT IN
を使用することは禁止されています。この構造化クエリはこれらの制限を効率的に回避し、指定された数の最近のレコード (LIMIT
句で定義) を除くすべてを正常に削除します。 42
を N
の希望の値に置き換えることを忘れないでください。
以上がMySQL で最新の N レコードを除くすべてのレコードを効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。