首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中的事务

SQL中的事务
EN

Stack Overflow用户
提问于 2014-03-30 18:27:06
回答 1查看 348关注 0票数 1

我有以下两项事务:

T1:

代码语言:javascript
复制
Begin Transaction;
S1: Insert Into Salary Values (103, 60000);
S2: Update Salary Set salary = salary + 10000 Where id = 101;
Commit;

T2:

代码语言:javascript
复制
Begin Transaction;
S3: Select Avg(salary) As a1 From Salary;
S4: Select Avg(salary) As a2 From Salary; 

假设单个语句S1、S2、S3和S4总是以原子方式执行。假设最初工资中有两个元组:(101,30000)和(102,50000)。每个事务运行一次并提交。事务T1总是以隔离级别Serializable (最高级别)执行。

a) (如果事务T2以可序列化的隔离级别执行,T2返回哪些可能的valuesa1和a2对?

b) (如果事务T2执行隔离级别读提交,那么T2返回哪些可能的值( a1和a2 )?

c) (如果事务T2以隔离级别执行读未提交),T2返回哪些可能的值对a1和a2?

以下是我的答案:

a) S1 - S2 - S3 - S4值: a1: 50000,a2: 50000

S3 - S4 - S1 - S2值: a1: 40000,a2: 40000

但我有点搞不懂是怎么读的,怎么写的。任何对B和C的帮助,都会是很大的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-03-31 09:34:28

  • 读提交=只显示已经提交的内容(或在DB中保存)
  • 读-未提交=读取数据库中当前的内容(不管提交)。

给定一个长事务,在发出“提交”命令之前,除非执行“未提交”,否则无法查看所有的插入/更新/删除。在遮罩下,您插入/更新的数据被锁定,以便正常查看。有时,甚至整个表都被锁定--除非您执行未提交的读操作,否则根本无法查看任何记录。

对于快速操作(例如不到1秒),您不会真正感觉到两者之间的区别,但是要测试两者之间的差异,您应该为T2打开一个不同的连接,并在没有“提交”命令的情况下运行T1,然后您将感觉到读提交的“锁”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22747989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档