一、什么是事务?
事务是指数据库执行的最小逻辑单位,即保证一组操作的顺利执行,或者失败回滚为原来的状态。
二、数据库四大特性ACID
- 原子性( Atomicity )描述的是数据库的逻辑工作单位,一个事务包含的左右操作都要完成,或者所有操作统一做回滚操作
- 一致性( Consistency )描述的是数据库的的数据在事务操作前后必须要满足业务规则约束,比如说转账前后的金额总和一致,贩卖商品数量不可能为负数等
- 隔离性( Isolation )描述的是在并发执行过程,事务之间操作的数据是相互隔离的,并发事务之间互不干扰,这也是数据库事务隔离级别需要解决的问题
- 持久性( Durability )描述的是一个事务提交后,操作结果会被保存到系统磁盘中,即使中途发生宕机,也能通过事务日志完成数据的恢复,日志主要包括回滚日志(undo)和重做日志(redo)
三、事务隔离级别
英文 | 中文 | 描述 | 事务影响 |
---|---|---|---|
READ UNCOMMITTED | 读未提交 | 一个事务未提交的数据对其它事务可见 | 脏读、不可重复读、幻读有可能发生 |
READ COMMITTED | 读已提交 | 一个已提交的更新、删除事务对其它事务可见 | 可避免脏读的发生,但不可重复读、幻读有可能发生 |
REPEATABLE READ | 可重复读 | 在一个事务中多次读取同样的数据结果是一致 的 | 可避免脏读、不可重复读的发生,但幻读有可能发生(INNODB为发生幻读) |
SERIALIZABLE | 串行化 | 不存在并性行为,强制事务串行执行 | 可避免脏读、不可重复读、幻读的发生,但性能会影响比较大 |
四、事务隔离级别解决方案
- 在读数据之前,对其加锁,组织其它事务对数据的修改
- 生成一个数据请求时间点的一致性数据快照,并利用这个快照来提供一定给级别(语句级或者事务级版本控制)的一致性读取(MVCC)
五、MVCC多版本并发控制
INNODB为每行创建了三个字段
- DB_ROW_IID 行标识
- DB_TRX_ID 插入或更新行的最后一个事务的事务ID,自动递增
- DB_ROLL_PTR 回滚指针
原因:
- 只能查找创建时间小于等于当前事务ID的数据和删除时间大于当前事务ID的行