事务是关系型数据库的核心,贯穿整个源代码,先来瞅瞅相关的数据结构,揭开面纱:
server层和innodb引擎层分别对应了不同的数据结构,但相互关联:
server层需要引擎注册事务,以便server层能够引用。
innodb层需要维持事务的状态,以及事务的状态转换的具体实现。
1. 相关数据结构
下面用一个简略图描述server和innodb的事务交互:
简单描述一下:
server层通过stmt和all链表关联了所有参与事务的引擎。 每一个connection,在innodb引擎分配一个trx结构,维持到会话结束。
无论一个事务有几条语句,有多少参与的table, 一个引擎只注册一次,因为一个session当前只有一个活动事务。server通过注册的引擎,通知引擎完成事务相关的操作。
相关的数据结构:
THD_TRANS
Ha_data
Ha_trx_info
trx_sys_struct
trx_struct
具体可以参考源码。
2. 事务如何开始
测试: select * from t
t表的引擎是innodb
1. 首次连接
第一次连接,创建THD对象时ÿ