数据库隔离级别的理解

数据库的隔离级别

数据库中每个事务都要占用一些资源,比如对表/数据共享操作权限,事务的隔离级别描述了事务对资源共享程度。

数据库的事务的隔离级别和解决的问题

隔离级别 出现的问题 原因
READ-UNCOMMITED 脏读 其他事务(线程)可以读取到当前事务修改但未提交的数据
READ-COMMITTED 不可重复读 设置数据库的隔离级别为READ-COMMITTED后可以解决事务脏读;当前事务获取数据的读锁,读完之后就解锁,当前事务有没有结束(即当前事务未提交),这时,其他事务可以对这个数据进行修改(读写),而当前事务再次读取这个数据时,数据在当前事务读取的两次过程中显示不一致,产生了事务中不可重复读现象
Repeatable Read(可重读) 幻读 不可重复读通过设置数据库的Repeatable Read隔离级别(即对当前事务的操作的数据加锁,并且只有等等事务结束才释放锁,这样避免了不可重复读);这仅仅保证了一个事务对的数据操作的过程中不被其他事务修改,不能阻止其他事务提交新的数据(向表中插入新数据或删除部分数据),尤其是当前事务统计表中数据时,两次统计的结果不一致导致幻读(像幻觉一般)
Serializable(可串行化) 数据库设置的隔离级别为Serializable时,事务读取数据可获得范围锁(如表锁等),事务之间访问这段数据时,必须一个接着一个串行进行访问

由此可知:隔离级别越高,受其他事务干扰就越少,并发性能就越差。

想法

数据库事务的对数据的访问其实质就多线程对共享数据的访问,隔离级别就是对数据加锁的应用(加锁的粒度问题)。

参考

数据库事务的属性-ACID
事务、数据库事务、事务隔离级别、锁的简单总结
关于Innodb中的事务隔离级别和锁的关系

猜你喜欢

转载自blog.csdn.net/renwotao2009/article/details/53004583
今日推荐