好吧,我接到了一个任务 [迷你项目],其中最重要的问题之一是数据库一致性。 该项目是一个 Web 应用程序,允许多个用户访问和使用它。我可以期望将并发查询和更新请求放入一小组表中,其中一些表相互连接(使用 FOREIGN KEYS)。
为了尽可能保持数据库的一致性,我们被建议使用隔离级别。在阅读了一些(也许还不够?)关于它们的内容之后,我认为对我来说最有用的是 READ COMMITTED 和 SERIALIZABLE。
我可以将查询分为三种:
- 获取查询
- 更新查询
- 组合
对于第一个,我当然需要数据是一致的,我不想呈现脏数据,或未提交的数据等。因此,我想使用 READ COMMITTED 来处理这些查询。 对于更新查询,我认为使用 SERIALIZABLE 将是最好的选择,但在阅读了一下之后,我发现自己迷路了。 在组合中,我可能必须从数据库中读取,并决定是否需要/可以更新,这 2-3 次调用将在同一事务下进行。
想就在每个查询选项中使用哪种隔离级别寻求一些建议。我什至应该为每种类型考虑不同的隔离级别吗?还是只坚持一个?
我正在使用 MySQL 5.1.53,以及 MySQL JDBC 3.1.14 驱动程序(要求...没有选择 JDBC 版本)
非常感谢您的见解!
编辑:
我决定使用REPEATABLE READ,这似乎是默认级别。 我不确定这样做是否正确,但我想 REPEATABLE READ 以及 LOCK IN SHARE MODE 和 FOR UPDATE 到查询应该可以正常工作...
大家怎么看?
最佳答案
我会建议 READ COMMITTED。能够在提交后立即看到其他 session 提交的数据似乎很自然。
不清楚为什么 MySQL 有默认的 REPEATABLE READ。
关于mysql - 在基本的 MySQL 项目中使用哪种隔离级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455799/