mysql - 在基本的 MySQL 项目中使用哪种隔离级别?

标签 mysql transactions isolation-level transaction-isolation

好吧,我接到了一个任务 [迷你项目],其中最重要的问题之一是数据库一致性。 该项目是一个 Web 应用程序,允许多个用户访问和使用它。我可以期望将并发查询和更新请求放入一小组表中,其中一些表相互连接(使用 FOREIGN KEYS)。

为了尽可能保持数据库的一致性,我们被建议使用隔离级别。在阅读了一些(也许还不够?)关于它们的内容之后,我认为对我来说最有用的是 READ COMMITTED 和 SERIALIZABLE。

我可以将查询分为三种:

  1. 获取查询
  2. 更新查询
  3. 组合

对于第一个,我当然需要数据是一致的,我不想呈现脏数据,或未提交的数据等。因此,我想使用 READ COMMITTED 来处理这些查询。 对于更新查询,我认为使用 SERIALIZABLE 将是最好的选择,但在阅读了一下之后,我发现自己迷路了。 在组合中,我可能必须从数据库中读取,并决定是否需要/可以更新,这 2-3 次调用将在同一事务下进行。

想就在每个查询选项中使用哪种隔离级别寻求一些建议。我什至应该为每种类型考虑不同的隔离级别吗?还是只坚持一个?

我正在使用 MySQL 5.1.53,以及 MySQL JDBC 3.1.14 驱动程序(要求...没有选择 JDBC 版本)

非常感谢您的见解!

编辑:

我决定使用REPEATABLE READ,这似乎是默认级别。 我不确定这样做是否正确,但我想 REPEATABLE READ 以及 LOCK IN SHARE MODEFOR UPDATE 到查询应该可以正常工作...

大家怎么看?

最佳答案

我会建议 READ COMMITTED。能够在提交后立即看到其他 session 提交的数据似乎很自然。

不清楚为什么 MySQL 有默认的 REPEATABLE READ。

关于mysql - 在基本的 MySQL 项目中使用哪种隔离级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455799/

相关文章:

sql-server - 为什么 SQL Server 意外停止发出范围锁

ruby-on-rails - Rails 中的锁/事务/隔离级别的详尽指南

java - 事务隔离级别与表上的锁的关系

Mysql + 两个结果集的区别

mysql - 如何在 MySQL 中选择最近 30 天的日期?

java - 如何以事务方式轮询数据库队列表并进行回滚?

php - Paypal 从 php 中的支付 key 获取交易详细信息

php - 记录集中的第一条记录为空。为什么?

MySQL (MariaDB - 10.0.16-MariaDB-1 (Debian) 奇怪的性能问题

PostgreSQL:在事务中检测到死锁 SELECT FOR UPDATE