数据库封锁协议解释:重点

排它锁又叫写锁,事务A对数据D加了排它锁,其它任何事务都不能再对数据D加共享锁或者排它锁。也就是说A可以读取或者修改D,但是其它事务不能读也不能写,但是!!即使数据D加了写锁,其它事务的最基本的select语句还是可以读数据D的,因为最基本的select语句并不用申请任何锁!这个是最迷惑的地方,明白了这一点,一级封锁协议协议会读脏数据就很好理解了。事务A对数据D=1加了排它锁,修改了数据使D=2,这个时候事务B虽然不能对数据D加任何锁,但是可以用select语句读,B读到了数据D=2,之后事务A出错,回滚D=1,那你B就读到了脏数据。二级封锁协议规定在一级的基础上规定,事务A对数据D加了排它锁,事务B想用基本的select语句读D也必须要申请共享锁(读锁)!!,而一级是不需要的!!,所以B在事务A没结束期间都不能读数据D,这样就不会出现读脏数据了!但是二级却不能保证可重复读,这是因为,二级规定读锁是读完就释放!!而不是事务结束才释放。比如B先对数据D=1加了读锁,读完释放了读锁,但是事务B并没有结束,这时事务A对数据D加了写锁,然后修改D=2,释放了写锁,这时,事务B再次对数据D申请读锁,读到了D=2,同一个事务,两次读取不一致,这就是二级为何不能保证可重复读!三级就是不是读完就释放,而是事务结束才释放,这样就可保证可重复读了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值