贵阳双龙区建设局网站,泰安诚信的网站建设,网页界面设计的参考文献,旅游网站建设技术解决方案并发事务问题#xff1a; MySQL隔离级别-未提交读#xff0c;提交读#xff0c;可重复读#xff0c;序列化
隔离级别对于并发事务的解决情况
隔离级别脏读不可重复读幻读未提交读不可不可不可读已提交可不可不可可重复读 #xff08;默认#xff09;可可不可串行化 MySQL隔离级别-未提交读提交读可重复读序列化
隔离级别对于并发事务的解决情况
隔离级别脏读不可重复读幻读未提交读不可不可不可读已提交可不可不可可重复读 默认可可不可串行化性能低可可可
默认隔离级别可重复读
日志类型
undo log 逻辑日志事务回滚时通过逆操作恢复到原来的数据。保证了原子性和一致性 redo log 记录数据页的物理变化服务宕机时恢复数据 保证了持久性
MVCC多版本并发控制
具体实现方式 数据隐藏字段、undo log、readView
数据库每条记录中包含三个隐藏字段如下
字段名称描述DB_TRX_ID最近修改事务ID,记录插入这条记录或最后一次修改该记录的事务IDDB ROLL_PTR回滚指针,指向这条记录的上一个版本,用于配合undo log,指向上一个版本。DB_ROW_ID隐藏主键,如果表结构没有指定主键,将会生成该隐藏字段。
实例如下
undo log 版本链 ReadView、当前读、快照读之间的区别
ReadView
ReadView(读视图)是快照读SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务(未提交的)id。
当前读
读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当当前记录,会对读取的记录进行加锁。对于我们日常的操作 如:select … lock in share mode(共享锁),select …for update,upodate,insert,delete(排他锁)都是一种当前读
快照读
简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。 Read Committed:每次select,都生成一个快照读。 Repeatable Read:开启事务后第一个select语句才是快照读的地方5,
readView的数据结构 版本链数据访问规则如下 实例如下 特别说明 在RR级别下连续多次快照读,ReadView会产生复用,没有幻读问题。 特例:当两次快照读之间存在当前读,ReadView会重新生成,导致产生幻读