事务的隔离级别一般分为四种:
1.read_uncommited(未提交读取)
2.read_commited(提交读取)
3.repeatable_read(可重复读取)
4.serialzable(序列化)
下面详细描述:
read_uncommited:
事务a修改了表,未提交,另一个事务就能读取这个被修改了的记录了。
会出现的问题:读脏数据,不可重复读,幻读。
所谓读脏数据就是:事务b修改了某个记录1改为2,事务a读了这个记录为2,这时事务b出现问题,没有提交而回滚了,这时事务a就读了一个错误的数据2,应该为1
read_commited:
事务a修改了表,必须提交以后,事务b才能读到这个被修改了的记录了。
解决问题:读脏数据
会出现的问题:不可重复读,幻读
所谓不可重复读:事务a读了一个记录为1,事务b修改了这个记录为2且提交,这时事务a读到的就是2了,但是事务a并没有结束,同一个事务内同一个记录怎么可以读到两个不同值呢?这就是不可重复读
repeatable_read
事务a修改了表,提交后,事务b不管读到的这个记录是否被修改,它始终都读到的是原来的内容。
解决问题:读脏数据,不可重复读
会出现的问题:幻读。
所谓幻读:就是事务a读取了一个记录为1,事务b修改了这个记录为2,提交了。问题出来了,事务a并不知道这个记录已经被修改成2了,还是在操作这个1,当然这就不对了。
serialzable
事务a操作完成后才能操作事务b
解决的问题:读脏数据,不可重复读,幻读