# 1. DDL 在 MySQL 中的隐式提交,执行 CREATE TABLE 自动提交事务? A CREATE TABLE 不会影响当前事务。 B MySQL 的 DDL 可回滚。 C MySQL 的 DDL 会隐式提交当前事务,且 DDL 不可回滚。 ✓ 正确答案 D MySQL 支持事务性 DDL。
# 2. PostgreSQL 中 DDL 的事务性,CREATE TABLE 可回滚? A PostgreSQL 的 DDL 会隐式提交。 B PostgreSQL 支持事务性 DDL,CREATE TABLE 可随事务回滚。 ✓ 正确答案 C PostgreSQL 的 CREATE TABLE 不可回滚。 D PostgreSQL 与 MySQL 的 DDL 行为相同。
# 3. 隐式提交的常见陷阱,autocommit、DDL、函数异常? A autocommit 与 DDL 隐式提交可能意外拆分事务,破坏原子性。 ✓ 正确答案 B autocommit 不影响事务边界。 C DDL 不会隐式提交。 D 函数异常不会影响事务。
# 4. PostgreSQL DDL 的事务性? A PostgreSQL 的 DDL 不可回滚。 B PostgreSQL 的 DDL 可随事务回滚,迁移脚本可原子执行。 ✓ 正确答案 C PostgreSQL 的 DDL 隐式提交。 D PostgreSQL 迁移脚本无法回滚。
# 5. 2PC 的单点故障(协调者宕机)与悬挂事务(in-doubt transaction)? A 悬挂事务会自动解决。 B 协调者不是单点故障。 C 2PC 中协调者宕机会导致悬挂事务,需靠日志与恢复解决。 ✓ 正确答案 D 2PC 无单点故障。
# 6. Saga 模式,长事务拆分为多个本地事务 + 补偿? A Saga 不需要补偿。 B Saga 保证全局原子性。 C Saga 把长事务拆为本地事务,失败时逆序执行补偿实现最终一致。 ✓ 正确答案 D Saga 与 2PC 完全相同。
# 7. TCC(Try-Confirm-Cancel)补偿事务模式? A TCC 不需要预留资源。 B TCC 只有两阶段。 C TCC 分 Try 预留资源、Confirm 确认、Cancel 取消三阶段。 ✓ 正确答案 D TCC 与 2PC 的 prepare/commit 相同。
# 8. XA 事务的标准(JTA、XA 规范)的实现? A XA 是单机事务。 B XA 是基于 2PC 的分布式事务规范,JTA 是 Java 的 XA 接口。 ✓ 正确答案 C JTA 与 XA 无关。 D XA 没有 prepare 阶段。
# 9. 两阶段提交(2PC, Two-Phase Commit)的协调者-参与者模型? A 2PC 无协调者。 B 2PC 只有单参与者。 C 2PC 没有 prepare 阶段。 D 2PC 由协调者协调多个参与者,prepare 后统一 commit 或 abort。 ✓ 正确答案
# 10. Seata AT 模式如何通过全局锁 + 本地 undo log 实现自动补偿?它面临的脏写问题是什么,TCC 的空回滚、悬挂与幂等又如何防御? A Seata AT 用全局锁+undo log 自动补偿,TCC 需防空回滚、悬挂与幂等。 ✓ 正确答案 B AT 模式无脏写问题。 C TCC 不需要幂等。 D AT 模式不生成 undo log。
# 11. 本地消息表与 RocketMQ 事务消息(half message + 状态回查)分别如何实现最终一致性?二者在可靠性、耦合度与运维成本上有何差异? A 本地消息表不需要本地事务。 B 两者实现完全相同。 C 事务消息不使用 half message。 D 本地消息表用本地事务+定时投递,RocketMQ 事务消息用 half message+状态回查。 ✓ 正确答案
# 12. MySQL XA(2PC)的性能开销来自哪里(binlog 与 redo 两阶段落盘、锁持有到 COMMIT 之后)?为什么高并发互联网场景很少直接使用 XA? A XA 锁持有时间短。 B XA 性能开销小。 C MySQL XA 因两阶段落盘与长锁持有开销大,高并发场景少用 XA。 ✓ 正确答案 D 高并发场景最适合用 XA。
# 13. 两阶段锁(2PL, Two-Phase Locking)与可串行化的关系? A 2PL 分增长期与收缩期,保证冲突可串行化,严格 2PL 防级联回滚。 ✓ 正确答案 B 2PL 与可串行化无关。 C 2PL 只允许获取锁不允许释放。 D 2PL 无锁。
# 14. 严格两阶段锁(Strict 2PL)防止级联回滚? A 级联回滚无法避免。 B 严格 2PL 提前释放锁。 C 严格 2PL 在事务提交后才释放锁,防止读到未提交数据导致级联回滚。 ✓ 正确答案 D 严格 2PL 读到未提交数据。
# 15. 事务调度(Schedule)的概念,串行调度(Serial)与可串行化调度? A 串行调度总是交错。 B 串行调度事务不交错,可串行化调度结果等价于某串行调度。 ✓ 正确答案 C 可串行化调度等价于任意交错。 D 调度与并发无关。
# 16. 可串行化(Serializable)的两种判定,冲突等价(Conflict Equivalence)与视图等价(View Equivalence)? A 冲突等价与操作顺序无关。 B 两种等价完全相同。 C 视图可串行化是冲突可串行化的子集。 D 冲突等价看冲突操作顺序,视图等价看读值与最终写,冲突可串行化是视图可串行化的子集。 ✓ 正确答案
# 17. 时间戳排序(Timestamp Ordering, TO)的乐观并发控制? A TO 不适合冲突排序。 B 时间戳排序用锁串行化。 C 时间戳排序按时间戳决定事务顺序,冲突时回滚,是乐观并发控制。 ✓ 正确答案 D TO 保证视图可串行化。
# 19. MySQL InnoDB 中 SAVEPOINT 与嵌套事务的差异? A SAVEPOINT 与嵌套事务完全相同。 B SAVEPOINT 是独立子事务。 C SAVEPOINT 可提交子事务。 D InnoDB 无真正嵌套事务,SAVEPOINT 提供事务内部分回滚。 ✓ 正确答案
# 20. SQL 标准中的嵌套事务支持(SAVEPOINT 的有限近似)? A SAVEPOINT 可独立提交子事务。 B SQL 标准要求真正的嵌套事务。 C SQL 标准用 SAVEPOINT 提供事务内部分回滚,是对嵌套事务的有限近似。 ✓ 正确答案 D SAVEPOINT 与嵌套事务完全等价。
# 21. 长事务/大事务对主从复制延迟的影响(binlog/WAL 单事务串行应用)与治理 A 大事务产生大量日志,从库单事务串行应用导致复制延迟放大。 ✓ 正确答案 B 大事务不影响复制延迟。 C 从库可并行应用同一事务。 D 长事务不会阻塞复制。
# 22. 嵌套事务(Nested Transaction)的概念,内部事务回滚不影响外部? A 嵌套事务与 SAVEPOINT 无关。 B 内部回滚会回滚整个外部事务。 C 数据库原生支持真正的嵌套事务。 D 嵌套事务中内部子事务回滚不影响外部事务。 ✓ 正确答案
# 23. 长事务对 MVCC 的影响,版本膨胀(Version Bloat)、VACUUM 阻塞? A 长事务阻塞 VACUUM 回收旧版本,导致版本膨胀与空间占用。 ✓ 正确答案 B 长事务不影响 MVCC。 C VACUUM 不受长事务影响。 D 旧版本总能被回收。
# 24. 长事务的检测,pg_stat_activity、INFORMATION_SCHEMA.INNODB_TRX? A PostgreSQL 用 pg_stat_activity、MySQL 用 innodb_trx 检测长事务。 ✓ 正确答案 B 长事务无法检测。 C 两个系统用同一张表检测。 D 只需看 CPU 就能判断长事务。
# 25. 长事务(Long Transaction)的成因,未提交事务、慢查询、客户端异常? A 长事务成因包括未提交、慢查询、客户端异常等。 ✓ 正确答案 B 长事务都是正常的。 C 客户端异常不会导致长事务。 D 慢查询不会导致长事务。
# 26. Oracle 中 DDL 的隐式提交行为? A Oracle 的 DDL 会隐式提交当前事务,且 DDL 不可回滚。 ✓ 正确答案 B Oracle 的 DDL 可回滚。 C Oracle 与 PostgreSQL 的 DDL 行为相同。 D Oracle 的 DDL 不影响当前事务。
# 27. SAVEPOINT 的语法,SAVEPOINT sp1、ROLLBACK TO SAVEPOINT sp1? A SAVEPOINT 设置保存点,ROLLBACK TO 回滚到保存点,RELEASE 释放保存点。 ✓ 正确答案 B ROLLBACK TO 会结束事务。 C RELEASE 会撤销之前操作。 D 回滚到保存点后事务无法继续。
# 28. 最终一致性(Eventual Consistency)vs 强一致性? A 强一致读最新数据,最终一致允许短暂不一致后收敛。 ✓ 正确答案 B 两者完全相同。 C 最终一致保证即时一致。 D 强一致牺牲一致性。
# 29. 最大努力通知(有限次重试 + 降级)与定期对账补偿机制如何配合,覆盖非实时跨系统一致性需求? A 定期对账只用于实时场景。 B 最大努力通知保证即时一致。 C 最大努力通知(有限重试+降级)与定期对账兜底,实现非实时最终一致性。 ✓ 正确答案 D 两者互斥。
# 30. 冲突可串行化(Conflict Serializable)的判定,优先图(Precedence Graph)的环检测? A 优先图与串行化无关。 B 优先图有环也冲突可串行化。 C 冲突可串行化不需要判环。 D 冲突可串行化用优先图判环,无环则冲突可串行化。 ✓ 正确答案
# 31. idle_in_transaction_session_timeout 的设置? A idle_in_transaction_session_timeout 自动终止超时空闲事务,防止长事务。 ✓ 正确答案 B 该参数只影响事务外空闲。 C 该参数默认强制启用。 D 该参数不影响事务。
# 32. SAVEPOINT 的嵌套与释放规则? A SAVEPOINT 可嵌套,回滚到外层保存点会释放内层保存点。 ✓ 正确答案 B 嵌套保存点互不影响。 C RELEASE 会撤销操作。 D 回滚不影响任何保存点。
# 33. DDL 与事务的关系,PostgreSQL 支持事务性 DDL 而 MySQL 隐式提交,这种差异对迁移脚本与回滚策略有什么影响? A MySQL 的 DDL 可随事务回滚。 B 两者迁移回滚策略相同。 C PostgreSQL 迁移可事务回滚 DDL,MySQL 迁移需手动补偿。 ✓ 正确答案 D PostgreSQL 的 DDL 不可回滚。
# 34. MySQL DDL 的隐式提交? A MySQL 的 DDL 可随事务回滚。 B MySQL 的 DDL 会隐式提交当前事务,且 DDL 不可回滚。 ✓ 正确答案 C DDL 不影响事务边界。 D TRUNCATE 可回滚。
# 35. MySQL autocommit? A autocommit=ON 时每条语句自动提交,多语句事务需显式 BEGIN。 ✓ 正确答案 B autocommit=OFF 时自动提交。 C autocommit 不影响事务边界。 D autocommit=ON 时无法开启事务。
# 36. RELEASE SAVEPOINT? A RELEASE 与 ROLLBACK TO 相同。 B RELEASE 撤销已执行操作。 C 释放后保存点仍可回滚。 D RELEASE SAVEPOINT 只释放保存点,不撤销已执行的操作。 ✓ 正确答案
# 37. 乐观并发控制(OCC)的冲突检测与重试策略(版本号/条件更新)在业务中的应用 A 版本号无法检测冲突。 B OCC 提前加锁防冲突。 C OCC 不需要冲突检测。 D OCC 用版本号/条件更新在提交时检测冲突,冲突时重试。 ✓ 正确答案
# 38. PostgreSQL 的 statement_timeout/lock_timeout/idle_in_transaction_session_timeout 的区别与应用 A 三者相同。 B statement_timeout 限语句执行,lock_timeout 限锁等待,idle_in_transaction_session_timeout 限事务空闲。 ✓ 正确答案 C lock_timeout 限语句执行。 D idle_in_transaction_session_timeout 限连接数。