2013-09-30 39 views
1

我正在嘗試DELETE最新的20條記錄,來自mysql。這意味着它們將是最後20條記錄。所以問題是我該如何做到這一點?我嘗試了類似delete from MyTable limit 20的東西,但它刪除了舊的20條記錄(意味着前20條記錄)。
我看過this question但問題是,在MyTable,我沒有主或自動增量字段。 我希望我解釋清楚我的問題。請指導解決方案。從mysql中刪除最新的X條記錄db

+0

你有沒有PK?你真的沒有桌子。 – Strawberry

+0

如何識別最後一行,如果沒有自動增加字段?任何列作爲Date_modified? –

回答

-1

你有自動增量ID嗎?如果有的話可以刪除最後20條記錄。

Delete from myTable Order by record DESC LIMIT 20 
+0

暗示是他們沒有。 – Strawberry

+0

他可以使用DESC。它應該工作 – RiKo

+0

我編輯了... – RiKo

3

您需要一個表明哪些條目是舊的或新的條目。這可以是日期時間柱或增加的數字或任何指示順序的東西。

delete from MyTable 
order by some_column desc 
limit 20 

但是,數據庫不會按特定順序存儲數據。你必須定義一個。

0

使用與舊錶格相同的設計創建另一個表格,但使用額外的自動遞增列。

計算舊錶格中有多少行。致電x

Ÿ = X - 20

插入到新表中一切從舊錶(讓那自動遞增列自動遞增本身),但使用

limit y 

現在您擁有舊錶中的所有行,除了最後的20行之外。基於某些數據排序。

最後,放棄舊錶,並解決未來未創建缺少主鍵的表,否則您將再次遇到此問題。

如果有一列確定插入行的日期和時間,則可以在插入時按升序排列。如果沒有,那麼就數據庫引擎而言,「最新的20行」沒有多大意義。

0

最快的爲每一個數據庫系統是選擇列到一個新表刪除舊的一個,並重新命名新與舊:

-- Assuming you have 100 records and want to drop the latest 30 
create table `new_temp` as 
select * from `old_table` 
limit 70; 

drop table `old_table`; 

alter table `new_temp` rename to `old_table`; 

你可以把一些邏輯到極限計算,但該應該引導你。