数据库事务隔离级别

来源:互联网 发布:python 矩阵 查看 编辑:程序博客网 时间:2024/05/22 14:02

数据库事务:数据库事务是指作为单个逻辑单元执行的一系列操作,这些操作是一组不可分割的工作单位;


事务具有原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)

原子性:事务所包含的操作要么全部成功,要么出错回滚;

一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态,例如约束了a+b=10,一个事务改变了a,那么b的值随之变化;

隔离性:多个用户并发的访问数据库时,系统为一个用户开启的事务,不能被其他用户的事务所干扰;

持久性:提交的事务将永久的改变数据库;


在多个用户并发访问数据库时,系统就需要对各个事务进行隔离操作,否则容易出现数据不一致的情况,如:

更新丢失:1. 更新丢失:两个事务同时更新,第二个事务的回滚覆盖了第一个事务更新的数据;2. 第二类更新问题:两个数据都读取到数据,并同时更新,第一个事物的更新被第二个事务覆盖;

脏读:事务A读取到事务B还未提交的数据,然后事务B回滚操作,事务A就读到了脏数据;

不可重复读:事务A第一次读取数据之后,事务B修改了数据,事务A再次读取数据,读到的值与第一次不一致;

幻读:事务A读取范围数据时,事务B又添加或删除行,导致事务A读取到幻影行;


数据库提供了4种隔离级别,分别是:

读未提交(Read Uncommitted):只限制同一数据写事务禁止其他写事务,会引发脏读;

读提交(Read Committed):只限制同一数据写事务禁止其他读写事务,解决脏读、更新丢失,未解决不可重复读;

可重复读(Repeatable Read):限制同一数据写事务禁止其他读写事务,读事务禁止其它写事务(允许读)。解决不可重复读、更新丢失和脏读,未解决幻读,解决幻读需要增加范围锁或表锁;

序列化( Serializable):最严格的事务隔离,限制事务一个接一个的执行,没有并发;


数据库中除了MySQL默认为可重复读,大部分均为读提交;


参考博客:http://www.2cto.com/database/201603/495078.html

0 0