网站首页 > 文章精选 正文
这也是面试中常见的问题,针对这个问题我们该怎么回答呢?我们需要将问题拆解:
1、先来介绍一下什么是事务
2、事务的四大特征(ACID)
3、事务的四大特征是怎么实现的
先来介绍一下什么是事务
事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位。其执行的结果将使数据库从一种一致性状态变迁到另一种一致性状态。事务是逻辑上是一个最小的原子单位,要么全部执行,要么全部不执行。
事务的四大特征(ACID)
1、原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用
2、一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的。
3、隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。与原子性、持久性侧重于研究事务本身不同,隔离性研究的是不同事务之间的影响。严格的隔离性对应了事务隔离级别中的串行化(Serializable),但是在实际应用中出于性能方面的考虑,很少会使用串行化。关于事务隔离级别的文章:《面试题:什么是脏读、不可重复读、幻读?如何解决?》
4、持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响
事务的四大特征是怎么实现的
1、原子性: 原子性的底层是通过 undo log 实现的。当多个SQL中有一个或多个执行失败时,需要用到 undo log 进行回滚
2、一致性: 实现方式是通过数据库自带约束(主键、字段类型等) + 用户自定义的约束
3、隔离性: 隔离性追求的是并发情形下事务之间的互不干扰。我们主要考虑简单的读操作和写操作:
1)(一个事务)写操作对(另一个事务)写操作的影响: 锁机制(LBCC)保证隔离性
2)(一个事务)写操作对(另一个事务)读操作的影响: MVCC保证隔离性
4、持久性: 持久性是通过 redo log + double buffer (双写缓冲) 来实现
注意:关于 undo log、redo log、double buffer 等内容我会在后文一一介绍,感兴趣的朋友可以关注我,我们一起来讨论。另外,我在工作之余整理了大量程序员面试题,如果想获取更多面试题,可以关注并私信我。
猜你喜欢
- 2025-05-09 面试必问的 MySQL 四种隔离级别,看完吊打面试官
- 2025-05-09 面试官:mysql自增长id用完了怎么办?这是我见过最中肯的答案了
- 2025-05-09 阿里面试:MySQL Binlog有哪些格式?底层原理?优缺点?
- 2025-05-09 1.5万字+30张图盘点程序员面试必会MySQL索引常见的11个知识点
- 2025-05-09 面试中的老大难-mysql事务和锁,一次性讲清楚
- 2025-05-09 手把手指导Linux系统centos7安装数据库MySQL5.7
- 2025-05-09 面试官问我MySQL索引为啥用B+树?我让他去问作者
- 2025-05-09 MySQL面试题:自增ID达到上限了会出现什么问题?
- 2025-05-09 MySQL索引失效问题,看完手撕面试官
- 2025-05-09 阿里面试:MySQL死锁的原因?解决方案有哪些?
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)