数据库 面试积累
2020-07-24 20:38
113 查看
一、事务
1.什么是事务?
- 事务包含一个或多个业务操作,这些操作要么都执行,要么都不执行。事务常被用来确保数据的一致性。
2.事务的四大特性ACID
- 原子性(Atomicity): 事务中所有操作是不可再分割的原子单元。事务中所有操作要么都执行成功,要么都执行失败。
- 一致性(Consistency): 事务执行后,数据库状态与其他业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账户余额之和应该保持不变。
- 隔离性(Isolation): 隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会互相干扰。
- 持久性(Durability): 一旦事务提交成功,事务中所有的数据操作都必须被持久化保存到数据库中,即使提交事务后,数据库崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。
CSDN博主总结:
- 原子性(事务不可分割);
- 一致性(事务前后数据一致);
- 隔离性(多个事务之间,保持数据的隔离);
- 持久性(保证事务在提交后,数据库必须对数据进行操作而产生永久性影响);
参考文章:blog
3.不考虑隔离性会产生的3个问题
- 脏读:一个事务读到另一个事务未提交的数据,造成数据错误。
引例:转账问题:A向B转100,,第一次读B,读到100。只要原来的事务不提交,B就会回滚至0,这就是脏读。 - 不可重复读:在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
- 幻读:在一个事务里面的操作中发现了未被操作的数据。A事务中读取到了B事务中已提交的新插入的数据,发现还有没有修改的数据。就像产生幻觉一样。
- 补充 不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。
- 幻读和不可重复读都是读取了另一条已经提交的事务,所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
参考文章:blog
4.解决产生问题的方法:四种隔离级别
-
读未提交:事务未提交的数据可以读。
并行问题严重严重。什么都不能防。
读已提交:读取已经提交了的数据。
-
可以防脏读,不能防不可重复读和幻读。
可重复读:读一个数据时,上锁。期间不让其他事务做删除修改操作。
-
可以防脏读、不可重复读,不能防幻读。
串行化:直到一个事务的所有子事务全部结束才可以执行下一个事务。
-
同步。什么都能防。
相关文章推荐
- 数据库面试常问的一些基本概念
- 面试之数据库分表
- [Java面试十一]数据库总结.
- .NET面试准备之数据库备份
- 数据库面试题目经典大全
- 互联网公司面试问题总结之设计模式和数据库
- 大数据面试资料积累(1)
- 某数据集团数据库初试笔试题(数据库面试 笔试题)
- 数据库方面面试问题
- oracle数据库开发的一些经验积累(一)
- 数据库面试总结
- mysql面试--数据库优化
- 【面试】数据库--根据比赛日期统计胜负场次
- 面试笔试杂项积累-leetcode 261-270
- 面试笔试杂项积累-leetcode 46-50
- 笔试面试有用题目积累
- 数据库(面试)
- 面试笔试杂项积累-leetcode 101-105
- 面试笔试杂项积累-leetcode 146-150
- 面试之数据库算法http://www.newsmth.net/nForum/#!article/Algorithm/37574?p=1