MySQL: 第二遍→【MySQL技术内幕+InnoDB存储引擎】学习之(三)

第六章  锁

6.1 lcok 与 latch 

6.2  Innodb 的锁

6.2.1 类型

S lock    X lock    行锁

 

意向锁, 对细粒度的操作加锁,需要对  粗粒度 加上意向锁。

6.2.2 一致性非锁定读

行被加上了  X lock ,此时不等待锁的释放,而是读取  快照  数据(undo 之前的版本数据)。

6.2.3  一致性锁定读

6.2.4 自增长 主键

6.2.5 外键

父表需要加S锁。

 

6.3 锁的算法

6.3.1 行锁三种算法

唯一索引,适合使用 record lock,锁记录,不会锁范围,提高并发。

6.3.2 解决  幻读 问题

 

6.4 锁问题

6.4.1 脏读

事务的隔离级别---一个事务可以读到另外一个事务尚未提交的的数据

6.4.2 不可重复读

6.4.3 丢失更新

 

 

6.5 阻塞

举例: 事务 进行了数据的 范围锁定,但是事务一直没有提交,另外开启一个事务,需要访问被锁定部分数据。

 

6.6 死锁

 

问题  : 外键不加索引会引起死锁???

 

6.7  锁升级

会影响并发性能

 

 

 

 

 

 

第七章  事务

ACID 四个特性

7.1 事务

7.1.1 认识

原子性:一次操作要么全部成功,要么全部失败

一致性:事务前后没有破坏数据库的约束性质,前后状态是一致的(较为抽象)

隔离性:事务之间是不会相互影响的,但是这个取决于事务的隔离级别,通过MVCC实现隔离级别

持久性: 事务操作后的结果是可以永久存在的,即使宕机也能恢复数据

7.1.2 分类

具体的细节见资料,自己只是看了一遍

7.2事务的实现

7.2.1 redo

记录对数据的操作,有固定的格式。

7.2.2 undo

回滚   undo只是逻辑日志。

回滚执行的是相反的操作,并不是直接恢复到事务开始前的状态。

undo 实现了MVCC,即非锁定读,在一行记录被锁定时,可以读取该行之前的版本数据。

undo 日志也需要 redo的维护。

7.2.3 purge 

最终完成 delete update操作,比如在undo中,逻辑删除一个记录是打上一个标记,由purge来处理。

因为支持MVCC,所以记录不能在事务提交时立即进行处理得到结果,因为此时可能有其他事务正在引用该行记录,所以可以利用记录之前的版本(但是这个有个问题就是,当前的记录与新的事务调用之前版本的记录如何进行的合并???????

 

7.3 - 7.5

 

7.6 事务的隔离级别

非提交读  炸成

提交读

可重复读  

序列化  完美

 

7.7 分布式事务

 

7.8 不好的事务使用习惯

7.8.1 在循环中提交事务

7.8.2 自动提交

7.8.3 自动回滚

7.9 长事务

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值