
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
MySQL数据库是大多数程序员在开发软件的时候会经常用到的一个数据库类型,而本文我们就通过案例分析来简单了解一下,MySQL数据库事务应用分析。
Mysql逻辑架构
MySQL事务是由存储引擎实现的,MySQL支持事务的存储引擎有InnoDB、NDBCluster等,其中InnoDB的使用为广泛,其他存储引擎如MyIsam、Memory等不支持事务。
Mysql的事务保证
Mysql的4个特性中有3个与WAL(Write-AheadLogging,先写日志,再写磁盘)有关系,需要通过Redo、Undo日志来保证等,而一致性需要通过DBMS的功能逻辑及原子性、隔离性、持久性共同来保证。
MVCC
MVCC大的好处是读不加锁,读写不冲突,在读多写少的系统应用中,读写不冲突是非常重要的,可极大提升系统的并发性能,这也是为什么现阶段几乎所有的关系型数据库都支持MVCC的原因,目前MVCC只在ReadCommited和RepeatableRead两种隔离级别下工作。它是通过在每行记录的后面保存两个隐藏列来实现的,这两个列,一个保存了行的创建时间,一个保存了行的过期时间,存储的并不是实际的时间值,而是系统版本号。MVCC在mysql中的实现依赖的是undolog与readview。
readview
在MVCC并发控制中,读操作可以分为两类:快照读(SnapshotRead)与当前读(CurrentRead)。
•快照读:读取的是记录的快照版本(有可能是历史版本)不用加锁(select)。
•当前读:读取的是记录的新版本,并且当前读返回的记录,都会加锁,保证其他事务不会再并发修改这条记录(select…forupdate、lock或insert/delete/update)。
redolog
redolog叫做重做日志。mysql为了提升性能不会把每次的修改都实时同步到磁盘,而是会先存到BufferPool(缓冲池)里,当作缓存来用以提升性能,使用后台线程去做缓冲池和磁盘之间的同步。那么问题来了,如果还没来及的同步的时候宕机或断电了怎么办?这样会导致丢部分已提交事务的修改信息!所以引入了redolog来记录已成功提交事务的修改信息,并且会把redolog持久化到磁盘,系统重启之后再读取redolog恢复新数据。redolog是用来恢复数据的,保障已提交事务的持久化特性。
undolog
undolog叫做回滚日志,用于记录数据被修改前的信息。他正好跟前面所说的重做日志所记录的相反,重做日志记录数据被修改后的信息。undolog主要记录的是数据的逻辑变化。为了在发生错误时回滚之前的操作,需要将之前的操作都记录下来,然后在发生错误时才可以回滚。undolog记录事务修改之前版本的数据信息,假如由于系统错误或者rollback操作而回滚的话可以根据undolog的信息来进行回滚到没被修改前的状态。undolog是用来回滚数据的,保障未提交事务的原子性。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。