mysql的锁机制

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的锁机制相关的知识,希望对你有一定的参考价值。

mysql的锁

1.1 锁的概念

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

在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

1.2 锁的分类

从对数据操作的类型

  • 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。
  • 写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。

从对数据操作的粒度分

  • 表锁
  • 行锁

1.3 表锁

1.3.1 表锁的特点

偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高并发度最低。

1.3.2 上锁的过程

lock table 表名字 read(write), 表名字2 read(write), 其他;

 1.3.3 查看表加过的锁

show open tables;

  1.3.4 释放表加过的锁

     unlock tables;

1.4 表锁的案例

1.4.1 案例情况

情况1:如果A加了读锁

A可以查自已的表,但不能更新或者增加自已的表数据,不能查看其他表的数据。

 B可以查A的表,但不能更新或者增加A的表数据(会阻塞),直到A释放了读锁,直到A释放锁,B才可以修改不然就一直阻塞。

 

 情况二:如果A加了写锁

A可以查自已的表,也可以更新或者添加自已的表数据。

 B不可以查A的表,也不能更新或者增加A的数据(会阻塞),直到A释放了写锁

 1.4.2 结论

对MyISAM表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它进程的写操作。

对MyISAM表的写操作〈加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。

简而言之:就是读锁会阻塞写,但是不会堵塞读。而写锁则会把读和写都堵塞。

此外,MyISAM的读写锁调度是写优先,这也是MyISAM不适合做写为主表的引擎。因为写锁后,其他线程不能做任何操作,大量的更新会使查询很难得到锁,从而造成永远阻塞。

Mysql中各类锁的机制图文详细解析(全)_码农研究僧的博客-CSDN博客

1.5 表锁

偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁 

以上是关于mysql的锁机制的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中的锁机制详解

Mysql中的锁机制

说一说MySQL的锁机制

mysql中的锁机制之概念篇

mysql的锁机制

深入了解mysql锁机制与事务的隔离级别