(1)简述:
数据库多个事务并发可能产生的问题,包括了脏写,脏读,不可重复读,幻读,针对这些多事务并发问题,实际SQL标准中就规定了事务的几种隔离级别,用来解决这些问题,注意,是SQL标准的事务隔离级别,并不是MySQL的事务隔离级别,MySQL在具体实现事务隔离级别的时候会有点差别。
(2)事务隔离级别:
在SQL标准中规定了4种事务隔离级别,就是多个事务并发运行时,相互是如何隔离的,从而避免一些事务并发问题,这4种级别:
read uncommitted(读未提交),read committed(读已提交),repeatable read(可重复读),serializable(串行化)
不同隔离级别是可以避免不同的事务并发问题的。
**Read Uncommitted**:是不允许发生脏写,就是说不可能两个事务在没提交的情况下去更新同一行数据,但这种隔离级别,可能发生脏读,不可重复读,<br />幻读,一般来说,没有人做系统开发时,把事务隔离级别设置到读未提交这个级别的。<br />**Read Committed**:不会发生脏写和脏读,就是说事务没提交的情况下修改的值,是绝对读不到的,但是可能会发生不可重复读和幻读问题,因为一旦事务<br />修改了值提交了,事务会读到的,所以多次读到的值不同。简写名词RC,这个级别在别的事务已经提交之后可以读到他们修改的值,<br />别的事务还没提交的时候,绝对不会读到事务修改的值。<br />**Repeatable Read**:可重复读级别,这个级别下不会发生脏写,脏读,不可重复读的问题,一个事务多次查询一个数据的值,哪怕是别的事务修改了这个值<br />还提交了,还是不会读到别的事务修改过的值,事务一旦开始,多次查询一个值,会一直读到同一个值,简写词 RR,RR级别保证不会<br />读到已经提交的事务修改的值,但是会发生幻读,RR隔离级别,保证了对同一行数据的多次查询,不会读到不一样的值,已提交事务修<br />改这行数据的值,不会对查询该数据产生影响。
Serializable:这种级别不允许多个事务并发执行,只能串行执行,先执行事务A提交,然后执行事务B提交,然后事务C提交,不会存在幻读情况,但是
不会用到,如果串行执行,数据库并发一秒就只有几十,性能极差。
(3)总结:比较常见的还是RC和RR级别。
知识点:事务传播机制,说的是多个方法调用,事务是如何开启的问题,隔离机制是不同的事务之间如何进行隔离。