gpt4 book ai didi

mysql - SQL 中的事务

转载 作者:行者123 更新时间:2023-11-30 23:03:45 25 4
gpt4 key购买 nike

我有以下两笔交易:

T1:

Begin Transaction;
S1: Insert Into Salary Values (103, 60000);
S2: Update Salary Set salary = salary + 10000 Where id = 101;
Commit;

T2:

Begin Transaction;
S3: Select Avg(salary) As a1 From Salary;
S4: Select Avg(salary) As a2 From Salary;

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

一)如果事务 T2 以隔离级别 Serializable 执行,T2 返回哪些可能的值 a1 和 a2 对?

b)如果事务 T2 以隔离级别 Read-Committed 执行,那么 T2 可能返回哪些值对 a1 和 a2?

c)如果事务 T2 以隔离级别 Read-Uncommitted 执行,T2 可能返回哪些值对 a1 和 a2?

这是我的答案:

一)S1 – S2 – S3 – S4 值:a1: 50000 , a2: 50000

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

但是我对读取提交和读取未提交的工作方式有点困惑。对 B 和 C 的任何帮助都将是一个很大的帮助。

最佳答案

  • read-committed = 仅显示已提交的内容(或保存在数据库)
  • read-uncommitted = 读取当前数据库中的内容(无论提交如何)。

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

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

关于mysql - SQL 中的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22747989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com