1

mySQL に、自分の Web サイトで実行された最後の 20 個のクエリを記録するテーブルがあります。20行目以降の行を削除したい。私はidを使用しますが、Auto_Incrementとして..

4

3 に答える 3

3

このようなことを試してください:

delete from <table> where id not in
(select id from <table> order by <datecol> desc limit 20)
于 2012-08-17T11:07:27.027 に答える
1
DROP TEMPORARY TABLE IF EXISTS temp_ids;
CREATE TEMPORARY TABLE temp_ids(id INT);

INSERT INTO temp_ids (id) 
SELECT id FROM myTable ORDER BY id DESC LIMIT 20; 

DELETE FROM myTable 
WHERE
    id NOT IN (SELECT id FROM temp_ids);

TEMPORARY TABLE避ける必要があるError Code: 1093. You can't specify target table 'myTable' for update in FROM clauseのでThis version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

編集

@gaurav.mishra280295-追加しOrder By idます。idが自動インクリメンタルPKであっても、挿入順序でもあるという100%の保証はありません。多少の遅延が発生する可能性がありますが、100%信頼できるわけではありません。

情報としてだけ。

于 2012-08-17T11:27:44.940 に答える
0

ID は単調で、毎回 1 ずつ増加するため、他に 2 つのテーブルを作成しないでください。最も古い ID を格納するもの。もう 1 つは ID の数を格納します。次に、これら 2 つのテーブルを使用して、行の削除をいつ開始し、どの行を削除するかを判断できます。削除するときは、テーブルの id を増やして、次に削除するものを記録します。

ストアド プロシージャでこれを行うことをお勧めします。

于 2012-08-17T11:45:33.947 に答える