数据库面试重要知识点总结

事务的四大基本要素(ACID)

知识点一:数据库事务正确执行的四个基本要素:

1.原子性(Atomicity): 事务开始后,要么全部完成,要么全部不完成,不能停留在某个中间环节。如果事务出错,那么就回滚(Rollback)到事务开始前的状态。
2. 一致性(Consistency): 事务开始前和结束后,数据库的完整性约束不能被破坏。比如A向B转钱,不能出现A扣了,B却没收到。
3. 隔离性(Isolation): 同一时间,只允许一个事务请求同一数据,不同的事务直接不能有任何干扰。比如A向银行卡存钱的过程中,B不能向同张银行卡存钱。
4. 持久性(Durability): 事务完成之前,该事务对数据库做出的更改将被保存到数据库之中,不能进行回滚。

知识点二:当事务的隔离性不够时,并发事务将带来以下问题:

1.更新丢失(Lost Update): 事务A和事务B选择同一行,并使用最初选择的值进行更新,这时候就可能出现丢失更新的问题。
2.脏读: 事务A读取了事务B更新的数据后,B进行回滚操作,那么A将读取到脏数据。
3.不可重复读: 当事务A对同一个数据多次读取,在读取的过程中,事务B对该数据进行更改并提交,则会使得事务A多次读取同一数据但结果不一致。
4.幻读: 当事务A读取几行数据,事务B在事务A多次读取数据的过程中插入/删除了一些其他数据。事务A在事务B插入/删除数据后将会发现多/少读取了一些原本不存在/存在的记录,就好像发生了幻觉一样。

知识点三:幻读和不可重复读的区别:

不可重复读的重点在于修改: 在同一事务中,同样的条件,读取的数据没有一致。
幻读的重点在于新增或者删除: 在同一事务中,同样的条件,读取的记录数没有一致。

知识点四:并发事务带来的问题的解决方案:

1.更新丢失: 是可以完全避免的,其可以通过加锁在防止。
2.脏读、不可重复读和幻读: 其实都属于数据库读一致性的问题,必须由数据库提供一定的事务隔离机制来解决:
1) 加锁。在读取数据前,对其加锁,组织其他事务对数据进行修改。
2) 数据多版本并发控制(MVCC)。可以认为是行级锁的变种,通过一定机制生成一个数据请求时间点的一致性数据快照,并用这个快照来提供一定级别的一致性读取。

事务的隔离级别:

数据库事务的隔离级别有4种,由低到高分别为:
(1) READ-UNCOMMITTED(读但未提交):最低的隔离级别,允许读取尚未提交的数据,可能会造成脏读、幻读或不可重复读。
(2)READ-COMMITTED(读已提交):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读和不可重复读仍有可能发生。
(3)REPEATABLE-READ (可重复读):对同一字段的多次读取是一致的,除非数据被本身事务所修改,可以防止脏读和不可重复读,但幻读仍有可能发生。
(4)SERUAKUZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,可以防止脏读、可重复读和幻读。
查看当前数据库的事务隔离级别: show variables like ‘tx_isolation’;

READ-UNCOMMITTED:读未提交,就是一个事务可以读取另一个未提交事务的数据。如:当老板给员工发工资不小心按错了,在老板发工资这个事务未提交之前被程序员看到了工资,这时候老板马上回滚就提交了事务,程序员这时候看到的工资是错误的数据。这就是脏读。
READ-COMMITTED: 读提交,就是一个事务要等另一个事务提交后才能读取数据。程序员查询自己银行卡余额为X元(事务A开启),其妻子将余额全取出来(事务B开启并提交),程序员想要支付时发现余额不足(事务B提交)。这就是不可重复读。
REPEATABLE-READ(可重复读):在事务开启的时候,不再允许修改操作。Mysql默认隔离级别。程序员查看今日消费记录(事务A开启)为A[n],其妻子消费X元(事务B开启并提交),程序员点击消费详情(事务A提交),发现数据不一样。这就是幻读。
SERUAKUZABLE:解决了脏读、不可重复读和幻读。其为读取的每一行数据都加了锁,效率低下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值