1

我正在使用带有 Java JPA 的 Google App Engine。隔离级别在事务内部是可序列化的;重复读取外部事务。

我搜索了很多文章,每个人都在谈论事务之间的行为,但没有人提到在同一个事务中读取

例子 :

/* data in User table with {ID=1,NAME='HANK'}  */

BEGIN;
UPDATE User SET name = 'MING' WHERE ID=1;
SELECT name FROM User WHERE ID = 1;
COMMIT;

结果:仍然 {ID=1, NAME='HANK'}

我的问题:

  1. 隔离级别设置是否会影响同一事务中的查询?
  2. 同一笔交易的规则是什么?
4

1 回答 1

1

在同一事务中完成的任何查询都将立即对其自身可见。在您的示例中,如果您读取 ID 为 1 的行,您将看到它已更新。不同之处在于其他用户如何受您的交易影响。根据您的隔离级别,其他用户可能会:

  • 被阻止,其他用户会等到你提交/回滚
  • 读取事务前的数据(快照隔离)
  • 即使没有提交也可以读取最新的数据(读取未提交)

我只是触及了隔离级别的皮毛,已经有很多关于这个主题的书。

于 2012-04-17T03:37:36.343 回答