我正在爲每個事務添加一系列記錄(例如100)。我希望每條記錄都有一個「交易ID」字段,該字段對於每個新交易都是遞增的,並且對於在特定交易中插入的每條記錄都是相同的值。我希望這樣做,以便客戶端可以執行查詢,然後在將來的某個時刻執行相同的查詢,但只檢索具有較新事務ID的記錄。做這件事的最好方法是什麼?我真的不想在應用程序級別生成ID,因爲數據庫被多個進程訪問,所以我必須協調ID分配跨進程。或者我可以有一個專用的TXID表和一個autoincrememt列,在開始事務之前插入,並使用last_insert_rowid()作爲TXID,但是爲了生成ID,存儲遞增數字表似乎有點低效。有什麼想法嗎?謝謝。sqlite:爲多插入事務創建事務ID
0
A
回答
1
如果你想要一個遞增的整數,你應該確實做你所建議的 - 有另一個表維護事務ID。您可以定期掃描這張表以刪除行,儘管它們會非常小巧高效,所以這不應該成爲一個大問題。
還有其他各種可能的解決方案,但正如您已經想到的那樣,其中大多數解決方案在您的情況下不起作用(根據您所需的保真度,碰撞的可能性)。如果你需要利用數據庫來保證唯一性,這是在SQLite中唯一的方法。或者,您可以嘗試類似random
或randomblob
functions,但顯然沒有針對PRG的唯一性保證。
如果不需要一個單調遞增的整數,你也可以生成一個RFC 4122 UUID在應用層面(這些仍然衝突,但是很少,如果你是從許多過程編寫 - 你可能還需要標記它與一個特定於流程的字符串並使其成爲URN,類似於urn:uuid:<tag>+<uuid>
)。如果所有作者都在同一臺機器上,使用類似pid
這樣的標籤就足以保證唯一性。
相關問題
- 1. WebSQL:插入多行/事務
- 2. 多次插入與事務
- 3. Actionscript SQLite在事務中插入語句
- 4. Android SQLite批量插入使用事務
- 5. HTML 5的SQLite:多個插入在一個事務中
- 6. Sqlite事務,語法錯誤。在同一個事務中插入和刪除
- 7. 是否允許在Android SQLite中一次創建多個事務
- 8. 如何使用apsw創建多個複雜的sqlite事務?
- 9. CodeIgniter - 使用事務插入多個表
- 10. 爲什麼SQLite插入會很慢? (事務使用)
- 11. SQLite事務失敗
- 12. SQLite事務失敗
- 13. SQLite事務和LastInsertRowID
- 14. 插入事務和參數?
- 15. 創建bitronix事務管理
- 16. 用FK將事務插入到第一行創建的行中
- 17. 用於CSV導入的SQLite事務
- 18. 建議,php mysql事務插入塊中的多個表
- 19. SQLite插入即使在事務處理時也會變慢
- 20. Spring + Hibernate + SQLite事務怪異
- 21. Sqlite事務處理讀寫
- 22. JavaScript SQLite事務回滾
- 23. Android,SQLite連接和事務
- 24. 未提交SQLite事務
- 25. iOS的SQLite事務語法
- 26. 在Spring JTA事務中創建一個本地事務
- 27. 在hibernate事務中創建一個簡單的jdbc事務
- 28. 爲什麼插入1M記錄沒有事務比在事務中慢?
- 29. 多個事務
- 30. 城堡自動事務管理是否爲事務性方法創建TransactionScope?
感謝您的回答。我想過UUID,但我需要確保每個新ID都大於最後一個。將做TXID表解決方案。 – gimmeamilk 2012-03-29 20:45:51