事务四大特性
- 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
- 一致性:指在事务开始之前和事务结束以后,数据不会被破坏,假如 A 账户给 B 账户转 10 块钱,不管成功与否,A 和 B 的总金额是不变的。
- 隔离性:多个事务并发访问时,事务之间是相互隔离的,即一个事务不影响其它事务运行效果。简言之,就是事务之间是进水不犯河水的。
- 持久性:表示事务完成以后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。
49.那ACID靠什么保证的呢?
- 事务的隔离性是通过数据库锁的机制实现的。
- 事务的一致性由undo log来保证:undo log是逻辑日志,记录了事务的insert、update、deltete操作,回滚的时候做相反的delete、update、insert操作来恢复数据。
- 事务的原子性和持久性由redo log来保证:redolog被称作重做日志,是物理日志,事务提交的时候,必须先将事务的所有日志写入redo log持久化,到事务的提交操作才算完成。

ACID靠什么保证
50.事务的隔离级别有哪些?MySQL 的默认隔离级别是什么?

事务的四个隔离级别
- 读未提交(Read Uncommitted)
- 读已提交(Read Committed)
- 可重复读(Repeatable Read)
- 串行化(Serializable)
MySQL默认的事务隔离级别是可重复读 (Repeatable Read)。
51.什么是幻读,脏读,不可重复读呢?
- 事务 A、B 交替执行,事务 A 读取到事务 B 未提交的数据,这就是脏读。
- 在一个事务范围内,两个相同的查询,读取同一条记录,却返回了不同的数据,这就是不可重复读。
- 事务 A 查询一个范围的结果集,另一个并发事务 B 往这个范围中插入 / 删除了数据,并静悄悄地提交,然后事务 A 再次查询相同的范围,两次读取得到的结果集不一样了,这就是幻读。
不同的隔离级别,在并发事务下可能会发生的问题: