1.事务的特性是什么?
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务包含了4个特性ACID
事务4个特性ACID | ||||
原子性(Atomicity) | 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。 | |||
一致性(Consistency) | 事务完成时,必须使所有的数据都保持一致状态。 | |||
隔离性(Isolation) | 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。 | |||
持久性(Durability) | 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。 | |||
并发事务问题 | ||||
脏读 | 一个事务读到另外一个事务还没有提交的数据 | |||
不可重复读 | 一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读 | |||
幻读 | 一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了”幻影” | |||
事务隔离级别 | 脏读 | 不可重复读 | 幻读 | |
Read uncommitted 未提交读 | √ | √ | √ | |
Read committed 读已提交 | × | √ | √ | |
Repeatable Read(默认) 可重复读 | × | × | √ | |
Serializable 串行化 | × | × | × |
2.undo log和redo log的区别
redo log: 记录的是数据页的物理变化,服务宕机可用来同步数据
undo log :记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据
redo log保证了事务的持久性,undo log保证了事务的原子性和一致性
3.事务中的隔离性是如何保证的呢?
锁:排他锁(如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁)
mvcc : 多版本并发控制
多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突。
MVCC的具体实现,主要依赖于数据库记录中的隐式字段、undo log日志、readView。