数据库中的事务

1.概述
什么是事务?
事务是指包含多个微小逻辑单元的一组操作,只要其中有一个逻辑失败了,那么这一组操作就全部以失败告终,不存在一般成功,一般不成功的状况。
事务的作用
事务在平常的CRUD当中也许不太常用,但是如果我们有一种需求,要求,一组操作中,必须全部成功执行,才算完成任务,只要有一个出错了,那么所有的任务都将回到最初的状况,恢复原样。那么这样就可以使用事务了。如:银行的转账例子

2.事务特性ACID[面试]
原子性(Atomicity):事务中的逻辑要全部执行,不可分割。(原子是化学反应的最小单位)
一致性(Consistency):指事务执行前和执行后,数据的完整性保持一致
隔离性(Isolation):指一个事务在执行的过程中不应该受其他事物的影响
持久性(Durability):事务执行结束(提交或回滚),数据都应持久化到数据中

3.安全问题&隔离级别[面试]
1)安全问题
a.读 问题
脏读:指一个事务读到了另一个事务还未提交的数据
不可重复读:一个事务读到了另一个事务提交的数据,导致多次查询结果不一致
幻读:一个事务读到了另一个事务已提交的插入的数据,导致多次查询结果不一致
b.写 问题
丢失更新:指一个事务去修改数据库,另一个事务也修改数据库,最后的那个事务,不
管是提交还是回滚都会造成前面一个事务的数据更新丢失
解决丢失更新通常有两种方法:悲观锁和乐观锁
悲观锁:指事务在一开始就认为丢失更新一定会发生,这是一件很悲观的事情。具体操
作步骤如下:
①所有事务在执行操作前,先查询一次数据,查询语句如下:
select * from student for update;
后面的for update 其实是数据库锁机制、一种排它锁
②哪个事务先执行这个语句,哪个事务就持有了这把锁,可以查询出来数据,后面的事
务再执行这条语句,不会有任何数据显示,就只能等着
③一直等到前面的那个事务提交数据后,后面的事务数据才会出来,那么才可以往下接
着操作
乐观锁:是指从来不会觉得丢失更新会发生。它的具体做法是什么呢?
要求程序员在数据库中添加字段,然后在后续更新的时候,对该字段进行判定比对,如
果一致才允许更新。例子如下:
①数据库表中,额外添加了一个version字段,用于记录版本,默认值从0开始,只要有
针对表中数据进行修改的,那么version久+1
②开启A事务,然后开启B事务
③A先执行数据库表操作。因为以前都没有人修改过。所以是允许A事务修改数据库的,
但是修改完毕,就把version的值变成1了
④B事务,这时候如果想执行修改,那么是不允许修改的。因为B事务以前是没有查询过
数据库内容的,所以它认为数据库的版本还是0。但是数据库的版本经过A修改,已经是1了
所以这时候不允许修改,要求其重新查询
⑤B重新查询后,将会得到version为1的数据,这份数据就是之前A事务修改的数据了,
B再进行修改,也是在A的基础上修改的。所以就不会有丢失更新的情况出现了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值