我使用SQLite的last_insert_rowid()
來獲取批量插入後最後插入的行ID。是否有任何競爭條件的風險可能導致此值不返回批次插入的最後一個ID?例如,是否有可能在完成插入和調用last_insert_rowid()
之間的某個其他進程可能再次寫入表中?在SQLite中檢索批插入行的ID
0
A
回答
1
last_insert_rowid()
返回有關在此特定連接中完成的最後一次插入的信息;它不能返回其他進程寫入的值。
爲確保返回的值與數據庫的當前狀態相對應,請利用SQLite的ACID保證(此處爲原子性):將批處理插入,last_insert_rowid()
調用以及您使用ID進行的任何操作一筆交易。
在任何情況下,last_insert_rowid()
的返回值僅在某些插入通過此連接完成時發生更改,因此您絕不應從多個線程訪問同一連接,或者如果您確實想這樣做,請手動序列化整個事務。
1
相關問題
- 1. 如何在使用Python在SQLite中插入行之後檢索插入的id?
- 2. 執行ExecuteSqlCommand後檢索插入的ID?
- 3. 檢索插入的ID Codeigniter
- 4. 在SQLite中使用批量插入自動生成的ID
- 5. 在Filemaker Pro中檢索新插入的行的ID
- 6. 在SQLite緩慢批量/批量插入
- 7. 使用SQlite批量插入
- 8. 批量插入Rails SQLite
- 9. sqlite併發批量插入
- 10. Android SQLite批量插入
- 11. 在sqlite中插入多行
- 12. Java PreparedStatement檢索最後插入的ID
- 13. 用Mysql檢索上次插入的ID
- 14. 後插入MySQL的檢索ID
- 15. 如何檢索ZF2中插入行的ID?
- 16. 批量插入後檢索ID's
- 17. iOS CoreData批量/批量插入(sqlite TRANSACTION)
- 18. 在InnoDB中批量插入的順序插入ID
- 19. 如何在SQLite中爲多行返回插入的id?
- 20. 如何在每個SQLite行中插入一個唯一的ID?
- 21. 在groovy中檢索最後插入的對象的ID
- 22. 插入後檢索記錄ID
- 23. 檢索最後插入的多個行的ID
- 24. Zend Framework:如何檢索最後插入的行的ID?
- 25. 在SQLite中檢索多個rowid插入或更新,使用JavaScript
- 26. 如何在SQLite中使用唯一ID插入重複行?
- 27. 如何更新Sqlite最後在iphone中插入行ID?
- 28. 在sqlite中檢索sqlite列中的值
- 29. SQL:檢索插入的行ID陣列/表
- 30. 使用MYSQL LAST_INSERT_ID()來檢索插入行的ID?
@Zso的評論呢?他建議多線程可以使用相同連接的場景。交易會防範嗎? – maxedison
一個連接=一個事務,因此無論線程模式如何,都不應從多個線程訪問相同的連接。 –
這個答案不應該被接受,因爲它談論**進程**,但風險在於使用**線程**。 'last_insert_rowid()'不一定是多線程安全的; 「多線程」線程模式會禁用數據庫連接的禁用。 – Zso