2018_03_05 数据库中的事务管理

事务的特性:

1,原子性:不可分割

2,一致性:事务执行前后,要保证数据完整性保持一致

3,隔离性:一个事务的执行过程中不应该受其他事务的干扰

4,持久性:事务一旦执行结束,数据要永久持久化到数据库


如果不考虑隔离性会引发的一些问题:

读问题:

脏读:一个事务读到另一个事务未提交的数据

不可重复读:一个事务读到另一个事务已经提交的update数据导致前后查询不一致

虚读:一个事务读到另一个事务已经提交的insert的数据导致前后查询不一致


如何避免读问题:

设置事务的隔离级别:

未提交读;

已提交读;

可重复读;

串行化;


写问题:

丢失更新:另一个事务提交或回滚的数据将一个事务提交的数据覆盖了。

多个事务修改同一条记录,A事务修改记录的年龄字段。B事务修改了记录中工资字段。A先提交了

B事务回滚导致A事务修改的记录被覆盖

B事务提交导致A事务提交的记录被覆盖

解决丢失更新问题:

悲观锁:就是很悲观,每次都认为会有人对数据库进行了修改,所以每次在拿数据的时候,都会上锁,这样别人想拿这个数据的时候就会锁住直到它拿到这个锁才能进行操作,传统数据库中很多时候都用到了这种锁机制,比如行锁,表锁等。

乐观锁:很乐观,认为每次去拿数据的时候别人没有进行修改,但是每次更新数据的时候都会判断一下别人是否对数据进行了修改,乐观锁适用于多读的情况,这样可以增加吞吐量。


两种锁各有优点,乐观锁只用于写很少的时候,这样可以省去了锁的开销,如果经常发生冲突,要使用悲观锁。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值