事务在mysql的内部到底是个什么东西? 是怎么实现的?
来源:2-2 事务原则与实现:SQL事务
g29tony
2018-12-29
问题1 事务在mysql的内部到底是个什么东西? 是怎么实现的? 是CPU切片?还是线程隔离? 还是一种连接的状态?
问题2 事务隔离在mysql内部是怎么实现的? 尤其是对于正在处理的数据,这些数据的内存空间是何种状态?
以可重复读为例,当另一个事务B修改并提交一些数据,而当前事务A查询这些数据且未提交时,这些数据的持久化状态是怎样的?为什么在事务B看来已经可以看到修改后的数据,而事务A看到的仍是未修改的数据,这时在操作系统的物理文件层面,数据库是否保留了两份数据?又或者数据库当中有相应的数据缓存策略使得不同的事务可以读到不同的数据?
写回答
1回答
-
大漠风
2019-01-03
有关数据库事务,以及分布式数据库事务,在慕课网上有一个非常好的免费教程:
在线分布式数据库原理与实践 https://www.imooc.com/learn/272
简单来说,数据库实现事务就是用锁来控制并发访问。就是在多线程访问数据的时候,用锁来控制事务(即读写的数据隔离)。例如最简单的序列化读的隔离级别,就是用排它锁控制所有的读写操作。其他的隔离级别,就是将读、写的操作用不同的方式组织,以并行、串行方式执行,实现读写相同数据的时候的隔离。
再说事务之间的并发,现在主流的数据库都使用MVCC模式,本质上就是copy on write方式,能够实现除了两个写数据操作以外,所有的读写操作都能实现并发。正是由于copy on write,所以会导致两个事务读同一个数据进行写操作时,可能会读到不一样的值。
00
相似问题