关于事务隔离级别

本文详细介绍了数据库四种事务隔离级别:readuncommitted、readcommitted、repeatableread及serializable的区别与特点。通过具体例子说明每种级别下可能出现的脏读、不可重复读及虚读等问题。

第一种 read uncommitted 此状态下脏读,不可重复读,虚读都有可能发生。此状态下两个人同时操作一个数据库表一边开启事务没有提交,另一边也开启事物开始更改数据但是也没有提交,此时第一个操作数据库的人在没有提交的情况下会看到另一边没有提交的数据,此时若第二个人不提交直接rollback数据回滚就会使数据变回原来的,这就是脏读。举例说用这种方式转账就很不安全,第一个人没有关闭事物就去查询账户发现钱多了,但是转账的人并没有提交,此时转账的人如果采用数据回滚就会使本来转好的钱回来。

第二种 read committed 此状态下避免了脏读,但是不可重复读,虚读都有可能发生。补充一点,这种事务隔离级别是oracle默认的。避免不可重复读,顾名思义,就是为了使第一个人在没有提交事物之前读取到的数据不可变,第二个人无论事物提没提交事物只要第一个人没有提交数据,那么第一个人查询到的数据都不会改变。

第三种是 repeatable read 此状态下避免了脏读,不可重复读,但是虚读是有可能发生。这种事物隔离级别是MySQL默认的,插入和修改数据只有在第一个人提交之后才可以查到,避免了数据的变动。

第四种是 serializable 此状态下避免了所有得问题但是效率降低了,一个人操作数据库的时候别人是无法修改的。

总结:

l  脏读:指一个线程中的事务读取到了另外一个线程中未提交的数据。

l  不可重复读:指一个线程中的事务读取到了另外一个线程中提交的update的数据。

l  虚读:指一个线程中的事务读取到了另外一个线程中提交的insert的数据

 

 

转载于:https://my.oschina.net/u/3755017/blog/1802341

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值