数据库事务隔离

事务是什么

事务指的是一连串数据库的操作。

1.1事务应该具有4个属性:

原子性:一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做

一致性:事务的开始和结束,数据都必须保持一致

隔离性:一个事务的执行不能被其他事务干扰,中间状态不可见

持久性:一旦提交,它对数据库中数据的改变就应该是永久性的

这四个属性通常称为ACID特性

1.2 并发时事务引发的问题

1. 脏读 (事务A读到了事务B的中间状态,破坏了隔离性)

2. 不可重复读  (事务进行中,再次读取以前读过的数据,却发现其读出的数据已经发生了改变、或某些记录已经被删除了!) 

3. 幻读(事务进行中,再次以相同条件查找,发现其他事务插入了满足其查询条件的新数据) 

幻读和不可重复读的区别:

不可重复读的重点是修改和删除:在同一事务中,同样的条件,第一次读的数据和第二次读的数据不一样。(因为中间有其他事务提交了修改/删除)

幻读的重点在于新增:在同一事务中,同样的条件,,第一次和第二次读出来的记录数不一样。(因为中间有其他事务提交了插入)

1.3 为了解决上面的问题 (制定事务隔离的标准)

SQL标准定义了4类隔离级别,每一种级别都规定了一个事务中所做的修改,哪些在事务内和事务间是可见的,哪些是不可见的。低级别的隔离级别一般支持更高的并发处理,并拥有更低的系统开销。


事务隔离级别

MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);

Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容