2021-01-29

数据库事务及锁理解

数据库事务的特性:原子性:事务中的所有操作,要么全部成功,要么全部失败

                                一致性:事务后数据满足符合一致性逻辑需求

                                隔离性:每个事务都有自己独立的空间,事务中间状态不会被其他事务看到。

                                              但是根据事务隔离性的情况,分为四种隔离级别:

                                             1.读未提交,A事务的中间状态会被B事务看到,这样会导致脏读。B事务读取到A事务对记录的修改并使用,后续A事务回滚了,那么B就发生了脏读

                                             2.不可重复读,A事务读记录的时候,B事务可以修改该记录。但是只有B事务提交的时候,A事务才能看到B的修改,这样会导致不可重复读

                                                 例如A事务读取记录,B事务开始写同样的记录,并提交,这是A事务重新读取该记录,会发现前后两次读同一条记录值不同

                                             3.可重复读,A事务开始读记录,B事务则只可读记录,不可修改记录,但是可以修改记录。这个不会有脏读,不可重复读。但是会出现幻读。

                                                 如果A事务对于所有记录按一定逻辑做update处理,这是B事务插入一条记录。或许A事务查看所有记录时会发现有记录不满足逻辑,出现幻读

                                             4.串行,A事务未执行,不允许B事务开始执行。

                                  持久性:事务提交后其修改会被持久化。

数据库锁:共享锁(读锁),排他锁(写锁)

                  数据库使用可重复读事务隔离级别的话:

                  用户持有读锁,其他用户可以进行读,但是不可以进行写

                  用户持有写锁,其他用户不可以进行读,也不可以进行写

数据库死锁: 

                 数据库死锁常出现的两种场景:

如果数据库事务隔离级别是可重复读的话,以下两个场景都会出现死锁,如果是读已提交,应该不会出现死锁

                1. A事务读取记录1,修改记录2,B事务读记录2,写记录1

2.事务1读取A记录,这时事务2修改A记录,然后事务1修改A记录   

         

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值