Mysql之锁的基本介绍

  数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能例外。MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样,为了满足各自特定应用场景的需求,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计,所以各存储引擎的锁定机制也有较大区别。MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定。

锁的分类
表锁

  表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。

  优点:开销小,加锁快;不会出现死锁  

  缺点:锁定粒度大,发生锁冲突的概率最高,并发度最低

页锁

  页级锁定是MySQL中比较独特的一种锁定级别,在其他数据库管理软件中也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。

  优点:开销和加锁时间界于表锁和行锁之间;锁定粒度界于表锁和行锁之间,并发度一般

  缺点:会出现死锁

行锁

  行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。

  优点:锁定粒度最小,发生锁冲突的概率最低,并发度也最高

  缺点:开销大,加锁慢;会产生死锁

MyISAM

  myisam是一种非事务类型的只支持表锁的存储引擎。使用的锁定机制完全是由MySQL提供的表级锁定实现。

  MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。锁模式的兼容性:
  1.对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;
  2.对MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作;

  MyISAM加锁方式:

  MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁。

  在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此,用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁。

原文地址:https://www.cnblogs.com/htyj/p/11772380.html