关于数据库‘事务’‘锁’的几个问题

1.什么时候用到事务?

答:事务是一个操作序列,其特点是不可再分,这些操作要么都执行,要么都不执行。例如银行转账中:从一个账号扣款并使另一个账号增款,这两个操作‘绑定’。一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。

2.事务的基本要素?

答:ACID

  • 原子性(atomic):一个事务中的操作要么全部提交成功,要么全部失败回滚。
  • 一致性(consistency):从一个一致的状态到另一个一致的状态。
  • 隔离性(isolation):一个事务做的修改,在提交前对其他事务是不可见的。
  • 持久性(durability):一旦事务提交,所做的改变就会永远封存在数据库中。

3.事务的隔离级别?

答:

  1. 未授权读取(未提交读):一个事务写数据,不允许其他事务写数据,但允许其他事务读。就是一个事务读取到其他事务未提交的数据。(解决了更新丢失问题,出现脏读问题)
  2. 授权读取(提交读):一个事务读数据,允许其他事务写数据,但未提交时禁止其他事务对该行的访问。就是一个事务读取到其他事务提交后的数据。Oracle默认隔离级别。(解决了脏读的问题,出现不可重复读问题)
  3. 可重复读:一个事务读的时候其他事务可读不可写,一个事务写的时候其他事务不可读不可写。就是一个事务对同一份数据读取到的相同,不在乎其他事务对数据的修改。MySQL默认的隔离级别。(出现幻读问题)
  4. 序列化:事务一个接一个的执行(性能太低)

4.数据库并发会出现的问题?

答:

  1. 更新丢失:两个事务对一行数据更新,一个事务的更新覆盖了另一个的;
  2. 脏读:一个事务读取到了另一个事务未提交的数据;
  3. 不可重复读:一个事务对同一行数据读取两次的结果不同(由于数据更新);
  4. 幻读:事务在第二次读的时候出现第一次未出现的数据情况(由于其他事务插入或删除数据造成的)。

5.并发控制技术?

答:

  1. 共享锁(s锁,读锁):可读不可写,其他事务也可加读锁;
  2. 排它锁(x锁,写锁,eXclusive lock):可读可写,其他事务不可加锁;
  3. 悲观锁:每次拿数据都认为别人会改数据,每次拿都上锁;
  4. 乐观锁:每次拿数据都认为别人不会改数据,每次拿都不上锁,更新时会看是否有其他人更新,让用户处理;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值