mysql事务与锁机制
为什么引入技术
什么是事务
事务的ACID特性及实现原理
并发异常额并发控制技术
故障与故障恢复技术
1小时后能够回答上来的问题:
1、什么是事务?事务的隔离级别有哪些?
2、事务的每个隔离级别会引发什么问题,mysql默认的是哪个级别?
3、mysql有哪些锁?
4、数据库崩溃时事务的恢复机制(redo日志和undo日志)
事务的基本概念:
数据库事务是构成单一逻辑工作单元的操作集合。
事务的特点(ACID)
a原子性:
c:一致性
i:隔离性 和串行执行一样
d:持久性
在事务的四个特点中,一致性是事务的根本追求,而
在事务的并发执行和事务故障或系统故障的情况下会对
事务的一致性造成破坏。
数据库系统通过并发控制技术和日志恢复技术来避免这种情况的发生。
并发控制技术保证了事务的隔离性。
日志恢复技术保证了事务的原子性。
事务的原子性是通过undo log来实现的。
事务的持久性是通过redo log来实现的。
事务的隔离性是通过(读写锁+MVCC)来实现的。
事务的一致性是通过原子性、持久性、隔离性来实现的。
原子性实现原理undo log
如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用
Undo Log中的备份将数据恢复到事务开始之前的状态。
持久性实现原理:redo log
脏读、可重复读、幻读
Mysql的隔离级别:
SQL标准为事务定义了不同的隔离级别,从低到高依次是:
读未提交
读已提交
可重复读
串行化
不同的隔离级别可能会导致不同的并发异常:
读未提交:脏读、不可重复读、幻读
读已提交:不可重复读、幻读
可重复读:幻读
串行化
mysql里面默认是可重复读
隔离性实现原理:锁
在mysql中,锁可以分为两类:
共享锁:共享锁定是将对象数据变为只读形式,不能进行更新,所以也称为读取锁定。
排它锁:insert、update、insert的时候,
锁的粒度:锁定对象的大小是锁的粒度。
记录、
表、
数据库
扩展:除了锁可以实现并发控制之外,还有其他策略:
基于时间戳的并发控制
基于有效性检查的并发控制
基于快照隔离的并发控制
故障及故障恢复
undo、redo