面试之前电话预约了面试时间
电话面试:时间35分钟
1.自我介绍
巴拉巴拉自己说吧!
2.什么是事务
- 事务的基本概念
数据库事务是构成单一逻辑工作单元的操作集合
注意点:
1.数据库事务可以包含一个或多个数据库操作,但这些操作是逻辑上的整体
2.构成逻辑整体的这些数据库操作,要么全部执行成功,要么全部不执行
3.构成事务的所有操作,要么全都对数据库产生影响,要么全都不产生影响,及不管事务是否执行成功,数据库总能保持一致性的状态。
4.并发操作下事务的控制尤为关键。
3.事务的特点(ACID)
-
原子性:事务中的操作作为一个整体像原子一样不可分割,要么全部执行成功要么全部执行失败。通过快照实现
-
一致性:事务中执行结果必须使数据库从一个一致性状态到另一个一致性状态。一致性状态是指:1.系统的状态满足数据的完整性约束(主码,参照完整性,check约束等)2.系统的状态反应数据库本应该描述的显示世界的真实状态。比如,转账前后两个账户的金额总数应该保持不变。事务的根本追求
-
隔离性:并发执行的事务不会相互影响,其对数据的影响和他们串行执行时一样。比如多个用户同时往一个账户转账,最后账户的结果应该和他们按先后次序转账的结果一样。** 通过锁机制进行实现,共享锁、排它锁、独占锁、间隙锁、自增锁、临键锁、意向锁**
-
持久性:事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失。先进行缓存,调用fsync指令使数据溢写到磁盘。wal日志
原子性实现原理:Undo log
1.mysql中有几种日志:undolog、redolog、binlog、relaylog 、slow log
2.undolog、redolog、binlog归属于哪些存储引擎:undolog/redolog归属于Innodb存储引擎。
- undolog是为了实现事务的原子性,在Mysql数据库InnoDB存储引擎中,还用undo log 来实现多版本并发控制(简称:MVCC)
- 在操作数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为undolog)。然后进行数据的修改。如果出现了错误或者用户执行了rollback语句,系统可以利用undolog中的备份将数据恢复到事务开始之前的状态。
注意:undolog是逻辑日志,可以理解为:
当delete一条记录,undolog中会记录一条对应的insert记录
当insert一条记录时,undolog会记录一条对应delete记录
当update一条记录时,它记录一条相反的update记录。
持久性原理:redo log
- 和undolog相反,redolog记录的是最新数据的备份。**在事务提交之前,只要将redolog持久化即可,不需要将数据持久化。**当系统崩毁时,虽然数据没有持久化,但是redolog已经持久化。系统可以根据redolog的内容,将所有数据恢复到最新状态。
mysql的隔离级别
事务具有隔离性,理论上来说事务之间的执行不应该相互产生影响,其对数据库的影响应该和他们串行执行时一样。
然而完全的隔离性会导致系统并发性能很低,降低对资源的利用率,因而实际上对隔离性的要求会有所放宽,这也会一定程度上造成对数据库一致性要求降低。
SQL标准为事务定义了不同的隔离级别,从低到高依次是:
- 读未提交:对事物处理的读取没有任何限制,不推荐
- 读已提交
- 可重复读
- 串行化
不同的隔离级别可能导致不同的并发异常,如下图
4.mysql存储引擎
- Innodb
- mylsam
- memory