面试官问我知不知道 MySQL 的锁,接下来让他刮目相看

Posted king哥Java架构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试官问我知不知道 MySQL 的锁,接下来让他刮目相看相关的知识,希望对你有一定的参考价值。

我们知道,数据也是一种供许多用户共享访问的资源。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素。从这一角度来说,锁对于数据库而言就显得尤为重要。本文将带领大家一起深入领略mysql锁的各种风采。

表锁

表级锁是mysql锁中粒度最大的一种锁,表示当前的操作对整张表加锁,资源开销比行锁少,不会出现死锁的情况,但是发生锁冲突的概率很大。

该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。

所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。

表锁被大部分的mysql引擎支持,MyISAM和InnoDB都支持表级锁。

MyISAM只是支持表锁,因此性能相对Innodb来说相对降低,而Innodb也支持表锁,但是默认的行锁,而且只有在查询或者其他SQL语句通过索引才会使用行锁。

行锁

行锁的是mysql锁中粒度最小的一种锁,因为锁的粒度很小,所以发生资源争抢的概率也最小,并发性能最大,但是也会造成死锁,每次加锁和释放锁的开销也会变大。目前主要是Innodb使用行锁,Innodb也是mysql在5.5.5版本之后默认使用的存储引擎。

行锁按照使用方式也氛围共享锁(S锁或者读锁)和排它锁(X锁或者写锁)

共享锁(S锁,读锁)

使用说明:若事务A对数据对象1加上S锁,则事务A可以读数据对象1但不能修改,其他事务只能再对数据对象1加S锁,而不能加X锁,直到事务A释放数据对象1上的S锁。这保证了其他事务可以读数据对象1,但在事务A释放数据对象1上的S锁之前不能对数据对象1做任何修改。

用法:

以上是关于面试官问我知不知道 MySQL 的锁,接下来让他刮目相看的主要内容,如果未能解决你的问题,请参考以下文章

面试官问:MySQL锁与事物隔离级别你知道吗?

京东面试官问我:“聊聊MySql事务,MVCC?”

面试官问我MySQL调优,我真的是

面试官问我MySQL索引,我真的是

面试官问:请介绍一下MySQL数据库的锁机制?

阿里面试官问我:到底知不知道什么是Eureka,这次,我没沉默