4-Mysql事务、锁、MVCC、Buffer
2021-05-28 17:53:03 2 举报
AI智能生成
Mysql事务、锁、MVCC、Buffer
作者其他创作
大纲/内容
分支主题
1、事务
属性
- 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。
- 一致性(Consistent) :在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规 则都必须应用于事务的修改,以保持数据的完整性。
- 隔离性(Isolation) :数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独 立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。
- 持久性(Durable) :事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。
带来的问题
- 更新丢失(Lost Update)或脏写:最后的更新覆盖了由其他事务所做的更新。
- 脏读(Dirty Reads):事务A读取到了事务B已经修改但尚未提交的数据
- 不可重读(Non-Repeatable Reads):事务A内部的相同查询语句在不同时刻读出的结果不一致,不符合隔离性
- 幻读(Phantom Reads):事务A读取到了事务B提交的新增数据,不符合隔离性
隔离级别
2、锁
分类
- 从性能上分为乐观锁(用版本对比来实现)和悲观锁
- 从对数据库操作的类型分,分为读锁和写锁(都属于悲观锁)
读锁(共享锁,S锁(Shared)):针对同一份数据,多个读操作可以同时进行而不会互相影响
写锁(排它锁,X锁(eXclusive)):当前写操作没有完成前,它会阻断其他写锁和读锁
读锁会阻塞写,但是不会阻塞读。而写锁则会把读和写都阻塞
- 从对数据操作的粒度分,分为表锁和行锁
死锁
原因:死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。
解决:让不同的session加锁有次序
3、MVCC
4、Buffer Pool
0 条评论
下一页