我使用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