暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql 1z0-909每日一题4

原创 山丘smith 2025-06-23
443

Examine these statements which execute successfully:

CREATE TABLE t (id INT PRIMARY KEY); INSERT INTO t (id) VALUES (1);

Now, examine these statements executed successfully by two concurrent sessions:

Session 1> SET autocommit=0; Session 1> UPDATE t SET id=id+1; Session 2> SET transaction_isolation="READ-UNCOMMITTED"; Session 2> BEGIN; Session 2> UPDATE t SET id=id+1; Session 1> ROLLBACK; Session 2> COMMIT;

Which two are true?
A) The current value of id is equal to 1.
B) Session 1 does not start a transaction.
C) Session 2 increments the committed value of id by 1.
D) The current value of id is equal to 3.
E) ROLLBACK releases the row lock taken by the UPDATE statement in Session

分析会话操作及其影响

给定两个并发会话的操作顺序:

  1. Session 1
    • SET autocommit=0;:关闭自动提交,隐式开启事务(因为后续UPDATE语句在autocommit=0时会自动启动事务)。
    • UPDATE t SET id=id+1;:执行更新(id初始值为1 → 更新后id=2),但未提交。此操作获取行级排他锁(X lock)。
  2. Session 2
    • SET transaction_isolation="READ-UNCOMMITTED";:设置事务隔离级别为读未提交(READ-UNCOMMITTED)。
    • BEGIN;:显式开启事务。
    • UPDATE t SET id=id+1;:尝试更新同一行,但被Session 1的排他锁阻塞(等待锁释放)。
  3. Session 1
    • ROLLBACK;:回滚事务,撤销UPDATE操作(id回滚至1),并释放持有的排他锁。
  4. Session 2
    • COMMIT;:在Session 1回滚后,Session 2的UPDATE操作获得锁并执行:基于当前已提交值(id=1)执行id+1=2,提交后id永久为2。

关键点解析

  • 最终id值​:初始id=1 → Session 1更新后id=2(未提交)→ Session 1回滚后id=1 → Session 2更新后id=2(提交)。
  • 锁行为​:ROLLBACK释放Session 1持有的锁,允许Session 2继续操作。
  • 事务隔离级别​:READ-UNCOMMITTED允许读取未提交数据,但不影响写操作对锁的需求。UPDATE操作仍需要获取锁,并在获取锁后基于当前已提交值执行。

正确选项及原因

  1. C) Session 2 increments the committed value of id by 1.​
    • Session 2的UPDATE操作在Session 1回滚后执行,此时已提交值为id=1,它执行id+1后提交,使最终id=2。因此,Session 2确实在已提交值上增加了1。
  2. E) ROLLBACK releases the row lock taken by the UPDATE statement in Session 1.​
    • 当Session 1执行ROLLBACK时,其持有的排他锁被释放,允许Session 2的UPDATE操作继续执行。这是MySQL的锁管理机制:事务结束(提交或回滚)时释放所有锁。

错误选项分析

选项 错误原因
A) The current value of id is equal to 1 最终id=2,不是1。Session 2的提交使值永久为2。
B) Session 1 does not start a transaction Session 1设置autocommit=0后,UPDATE隐式开启事务(MySQL行为)。
D) The current value of id is equal to 3 最终id=2(Session 2提交后),不是3。任何操作都未导致id=3。

Editor _ Mermaid Chart20250623065033.png

总结​:正确选项是 ​C​ 和 ​E,分别对应Session 2基于已提交值更新和ROLLBACK释放锁的行为。

最后修改时间:2025-06-23 22:29:38
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论