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