专栏名称: 高效运维
高效运维公众号由萧田国及朋友们维护,经常发布各种广为传播的优秀原创技术文章,关注运维转型,陪伴您的运维职业生涯,一起愉快滴发展。
目录
相关文章推荐
今天看啥  ›  专栏  ›  高效运维

10人面试9个错?令人“迷惑”的 MySQL 加锁机制,到底是怎样的?

高效运维  · 公众号  · 运维  · 2023-11-23 07:10
    

文章预览

首先来看这个面试题: 已知表t是 innodb 引擘,有主键:id( int类型 ),下面3条语句是否加锁?加锁的话,是什么锁? select * from t where id=X; begin;select * from t where id=X; begin;select * from t where id=X for update; 这里其实有很多依赖条件,并不能一开始就给出一个很确定的答复。我们一层层展开来分析。 01 MySQL 有哪些锁? 首先要知道 MySQL 有哪些锁。如上图所示,至少有12类锁。 其中, 自增锁 是事务向包含了 AUTO_INCREMENT 列的表中新增数据时会持有, predicate locks for spatial index  为空间索引专用,本文不讨论这2类锁。 锁按粒度可分为全局、表级、行级,共3类。 1.1 全局锁 对整个数据库实例加锁。 加锁表现:数据库处于只读状态,阻塞对数据的所有 DML/DDL 加锁方式: Flush tables with read lock 释放锁: unlock tables (发生异常时会自动释放) 作用场景:全局锁主要用 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览