For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
数据库架构是目前大多数软件开发程序员都需要熟练掌握的一个编程技术,而本文我们就通过案例分析来简单了解一下,事务特性与应用基础知识分享。
事务的四大特性
原子性:事务是小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性:执行事务前后,数据库从一个一致性状态转换到另一个一致性状态。
隔离性:并发访问数据库时,一个用户的事物不被其他事务所干扰,各并发事务之间数据库是独立的;
持久性:一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
事务的脏读、不可重复读、幻读问题
脏读:如果一个事务「读到」了另一个「未提交事务修改过的数据」,就意味着发生了「脏读」现象。
幻读:在一个事务内多次查询某个符合查询条件的「记录数量」,如果出现前后两次查询到的记录数量不一样的情况,就意味着发生了「幻读」现象。
丢弃修改:两个写事务T1T2同时对A=0进行递增操作,结果T2覆盖T1,导致终结果是1而不是2,事务被覆盖
不可重复读:在一个事务内多次读取同一个数据,如果出现前后两次读到的数据不一样的情况,就意味着发生了「不可重复读」现象。
事务的隔离级别有哪些
READ_UNCOMMITTED(未提交读):低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读;
READ_COMMITTED(提交读):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生;
REPEATABLE_READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生;
SERIALIZABLE(串行化):高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
ReadView的作用
ReadView有四个重要的字段:
m_ids:指的是在创建ReadView时,当前数据库中「活跃事务」的事务id列表,注意是一个列表,“活跃事务”指的就是,启动了但还没提交的事务。
min_trx_id:指的是在创建ReadView时,当前数据库中「活跃事务」中事务id小的事务,也就是m_ids的小值。
max_trx_id:这个并不是m_ids的大值,而是创建ReadView时当前数据库中应该给下一个事务的id值,也就是全局事务中大的事务id值+1;
creator_trx_id:指的是创建该ReadView的事务的事务id。
对于使用InnoDB存储引擎的数据库表,它的聚簇索引记录中都包含下面两个隐藏列:
trx_id,当一个事务对某条聚簇索引记录进行改动时,就会把该事务的事务id记录在trx_id隐藏列里;
roll_pointer,每次对某条聚簇索引记录进行改动时,都会把旧版本的记录写入到undo日志中,然后这个隐藏列是个指针,指向每一个旧版本记录,于是就可以通过它找到修改前的记录。
通过「版本链」来控制并发事务访问同一个记录时的行为就叫MVCC(多版本并发控制)。
MySQL可重复读级别完全解决幻读了吗
针对快照读(普通select语句),是通过MVCC方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。
针对当前读(select...forupdate等语句),是通过next-keylock(记录锁+间隙锁)方式解决了幻读,因为当执行select...forupdate语句的时候,会加上next-keylock,如果有其他事务在next-keylock锁范围内插入了一条记录,那么这个插入语句就会被阻塞,无法成功插入,所以就很好了避免幻读问题。
对于「读提交」和「可重复读」隔离级别的事务来说,它们是通过ReadView来实现的,它们的区别在于创建ReadView的时机不同:
「读提交」隔离级别是在每个select都会生成一个新的ReadView,也意味着,事务期间的多次读取同一条数据,前后两次读的数据可能会出现不一致,因为可能这期间另外一个事务修改了该记录,并提交了事务。
「可重复读」隔离级别是启动事务时生成一个ReadView,然后整个事务期间都在用这个ReadView,这样就保证了在事务期间读到的数据都是事务启动前的记录。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。