MySQL实战 | 06/07 简单说说MySQL中的锁

目录

为什么要有锁
MySQL的锁管理机制
MySQL的锁执行流程
全局锁
  mysqldump-single-transaction

       set golobal readonly=true?
     注意点
表级锁
  表锁

       元数据锁(MDL:metadata lock)
行锁

       InnoDB 的行锁
  死锁

       更新一条记录时具体什么时候用行锁什么时候是表锁

Online DDL 的过程
总结

锁是计算机协调多个进程或纯线程并发访问某一资源的机制。

在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。

如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

为什么要有锁?

使用数据库,避免不了并发问题,当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性

锁就是其中的一种机制。

我们可以用公厕做个比喻。

公厕是可供多个消费者使用的,因此可能出现多个人同时需要使用厕所的情况。

但是,厕所只有一个,总不能大家一起吧?

为了避免冲突,于是厕所里装了锁,某一个人在上测试时,可以在里面用锁锁住,其他人就不能再从外面打开了,只能等待。

等里面的人出来了,从里面把锁打开,外面的人才能进去。

下面,带你一起梳理下 MySQL 的锁管理机制和锁的执行流程,先有一个大致的脉络。

MySQL 的锁管理机制

MySQL实战 | 06/07 简单说说MySQL中的锁_第1张图片

1、全局读锁 — FLUSH TABLES WITH READ LOCK(SQL层)

2、表级 table-level 数据锁(SQ

你可能感兴趣的:(Java,架构,分布式,MySQL,Java,架构,MySQL)