MYSQL学习笔记4 锁

2022-06-19  本文已影响0人  夢醒皆涳

全局锁

命令 Flush tables with read lock (FTWRL)

另一种全局锁 不推荐使用

set global readonly=true 的方式

表级锁

一种是表锁, lock tables … read/write

表级锁 meta data lock,MDL

一种是元数据锁(meta data lock,MDL)。

行锁

死锁

两个事务互相等待对方先提交会造成死锁

热点数据性能问题

检查死锁

show engine innodb status

事务的启动方式

begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作 InnoDB 表的语句,事务才真正启动。如果你想要马上启动一个事务,可以使用 start transaction with consistent snapshot 这个命令。

事务id

开启事务会获得一个事务id(自增),数据版本是按照提交时间来排序的


image.png

所以 A看到的还是1,一致性原则。
事务id的排序是 A<B<C
数据版本的排序是C早于B
B如果再自己update之前查询,查到的还是1,因为一致性
但是自己update之后查到的就是3,原因是当前读 再最新的数据版本上执行更新。
更新数据都是先读后写的,而这个读,只能读当前的值,称为“当前读”(current read)。

事务是如何实现的MVCC呢?

上一篇 下一篇

猜你喜欢

热点阅读