33
A
回答
34
在一个高度并发的应用程序中,它可能(理论上)发生在第一个选择中读取的数据在其他选择被执行之前被修改。
如果这是您的应用程序中可能发生的情况,您应该使用事务来包装您的选择。确保你选择了正确的isolation level,但不是所有的事务类型都能保证一致的读取。
更新: 您也可以找到并发更新/插入解决方案this article(又名UPSERT)有趣。它提出了几种常用的upsert测试方法,以查看实际使用的方法保证数据在select和next语句之间未被修改。结果是令人震惊的,我会说。
2
相关问题
- 1. 多个预处理语句(SELECT)
- 2. SQL Server事务和SELECT语句
- 3. 使用SELECT语句
- 4. 使用Select语句
- 5. Android SQLite select * from表名%like key%使用预处理语句
- 6. 如何处理使用oracle sql select语句的尾随空格
- 7. 使用“使用”语句处理
- 8. 使用LinqDataSource和SELECT语句
- 9. SELECT语句不使用possible_keys
- 10. 专访:使用select语句
- 11. 使用MySQL select语句
- 12. 如何处理SQL Select语句(IBatis 2)中的Empty IN子句?
- 13. 使用Select语句,其中X IN(SELECT ...)
- 14. 从ADO.NET调用Oracle时批处理多个select语句
- 15. 处理switch语句
- 16. 使用IF语句处理回车键
- 17. C#ODP.net使用语句处理
- 18. 使用If语句处理Bool值
- 19. 使用fmdb打印预处理语句
- 20. 使用语句的未处理异常
- 21. 使用多个PDO预处理语句
- 22. mysqli_fetch_array(),预处理语句和LIKE语句
- 23. 如何使用IN子句使用PDO预处理语句?
- 24. Mysql select语句
- 25. SELECT语句
- 26. 在SELECT语句
- 27. Select语句MSSQL
- 28. SELECT语句
- 29. 在SELECT语句
- 30. select语句
我使用服务代理与高度并发服务与类似的情况下,并有高死亡率下的SQL死锁问题。 应用这个建议和**特别是**上面提到的[文章](http://michaeljswart.com/2011/09/mythbusting-concurrent-updateinsert-solutions/)修复了所有的僵局 - 谢谢:-) – Sia 2016-09-20 21:04:37