数据库中的事务机制

事务机制

关系型数据库是需要遵循 ACID 规则的,分别介绍如下 。

A( Atomic )原子性:

即事务要么全部做完,要么全部都不做。 只要其中一个操作失败,就认为事务失败,需要回滚 。

C ( Consistency )一致性:

数据库要一直处于一致的状态 。

I ( Isolation )独立性:

并发的事务之间不会互相影响 。

D ( Durability )持久性:

一旦事务提交后,它所做的修改将会永久地保存在数据库中 。

为了达到以上事务特性,数据库定义了几种事务隔离级别 。

1 ) 未授权读取( Read Uncommitted ) :

会产生脏读,可以读取未提交的记录, 实际情况下不会使用 。

2 ) 授权读取( Read Committed ):

会存在不可重复读以及幻读的现象 。 不可重复读重点在修改,即读取过的数据两次读的值不一样;幻读则侧重于记录数目 变化,多次执行同一个查询返回的记录不完全相同 。

3 ) 可重复读取( Repeatable Read ):

解决了不可重复读的问题, 会存在幻读现象 。InnoDB 使用 MVCC+Gap Lock ( InnoDB 行锁的一种)避免了幻读问题。

4 ) 串行( Serializable ):

也称可串行读,此级别下读操作会隐式获取共享锁,保证不同事务间的互斥 。 其消除了脏读 、 幻读,但事务并发度急剧下降 。

这里需要注意的是, MySQL 的默认事务级别为 Repeatable Read ,而 JDBC 的默认事务级别为 Read Committed ,因此使用的时候要特别注意 。

此外,由 于 Read Committed 有不可重复读的问题,因此不能在 Statement 格式的 Binlog 下使用 ,必须设置为 Mixed 或者 Row。

事务隔离的实现基于锁机制和并发调度 。

其中并发调度使用的是 MVCC (多版本并发控制),通过保存修改行的旧版本信息来支持并发一致性读和回滚等特性。

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » 数据库中的事务机制

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多