提示:以下是本篇文章正文内容
一、InnoDB
InnoDB 内部做了很多优化,包括从磁盘读取数据时采用的可预测性读,能够自动在内存中创建 hash 索引以加速读操作的自适应哈希索引,以及能够加速插入操作的插入缓冲区等。
InnoDB 支持真正的在线热备份,MySQL 其他的存储引擎不支持在线热备份,要获取一致性视图需要停止对所有表的写入,而在读写混合的场景中,停止写入可能也意味着停止读取。
二、事务
什么是事务?
要么全部成功,要么全部不执行。
事务是指满足ACID特性的一组操作,可以通过Commit提交一个事物,也可以使用Rollback进行回滚
三、事务的ACID
事务的ACID分别是:
- Atomicity:原子性
- Consistency:一致性
- Isolation:隔离性
- Durability:持久性
原子性:
事务被视为不可分割的最小单元,事务的所有操作要么全部成功,要么全部失败回滚。
一致性:
数据库在事务执行前都保持一致性状态,在一致性状态下,所有事务对一个数据的读取结果都是相同的
隔离性:
一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢。
ACID之间的关系:
事务的ACID特性概念很简单,但不好理解,主要是因为这几个特性不是一种平级关系:
- 只有满足一致性,事务的结果才是正确的。
- 在无并发的情况下,事务串行执行,隔离性一定能够满足。此时只要能满足原子性,就一定能满足一致性。在兵法的情况下,多个事务并行执行,事务不仅要满足原子性,还要满足原子性,还要满足隔离性,才能满足一致性。
- 事务满足持久化是为了能应对数据库崩溃的情况。 这里是引用
四、隔离级别
读未提交:事务的修改,即使没有提交,对其他事务也算是可见的
读提交:一个事务只能读取已经提交的事务所做的修改。换句话说,一个事物所做的修改在提交前对其它事务是不是可见的。
可重读:保证在同一个事务中多次读取同样数据的结果是一样的
可串行化:强制事务串行执行,需要加锁实现,而其它隔离级别通常不需要:
脏读:
脏读指的是不同事务下,当前事务可以读取到另外事务未提交的数据
不可重复读:
不可重复读指的是同一事务多次读取同一数据集合,读取到的数据是不一样的情况
幻读:
幻读是一种特殊的不可重复读