锁机制概述

为了保证多用户并发操作时,被操作的数据资源能够保持一致性的设计原则,需要在用户进行数据操作时对指定资源加锁

MySQL数据库中的锁主要分为“表级锁”(如MyISAM存储引擎)和“行级锁”(InnoDB存储引擎),本文主要基于这两个存储引擎介绍表级锁和行级锁

表级锁和行级锁

表级锁是MySQL中锁的作用范围最大的一种锁,一旦用户对数据库中某个表T进行操作,那么整个表T将会被加锁,其他用户无法访问或操作表T中任何数据资源
优点:

  • 有效避免死锁的发生
    并发时只有一个用户能够获得表T的表级锁,其他用户只能等待,因此不存在死锁问题
  • 加锁速度快,资源消耗小
    用户对表T进行数据操作时表级锁只需要加一次,不需要频繁加锁释放锁
    缺点:
  • 并发操作时发生锁冲突的概率大
    由于表级锁的作用范围大,即锁的粒度大,在并发时出现多个用户等待一个用户释放锁的概率也大,资源竞争大

行级锁是MySQL中锁的作用范围最小的一种锁,当用户对表进行操作时,锁只加在表中用户操作所涉及到的一行或多行记录上,而不会使整个数据表被锁定
优点:

  • 处理并发操作的能力较高,提高系统整体性能
    行级锁相比表级锁有效减少了锁定资源竞争的发生
    缺点:
  • 发生死锁的可能性更高
  • 每次加锁和解锁消耗的资源更多

共享锁和排他锁

实际应用中,根据操作的不同,锁可以划分为读锁写锁
读锁表示用户读取操作时添加的锁,此时其他用户虽然不可以进行写操作(如更新数据、插入数据、删除数据等),但可以读取该数据资源,因此读锁也叫共享锁
写锁是用户进行写操作时添加的锁,此时其他用户对该数据资源既无法读也无法写,因此写锁也叫排他锁

隐式锁和显式锁

根据锁在MySQL中的状态,锁还可以分为隐式锁显式锁,不管是MyISAM存储引擎表还是InnoDB存储引擎表,都可把锁按状态分为隐式锁和显式锁

隐式锁是当用户对存储引擎表进行读/写操作前,服务器会“自动”地为其添加一个表级的读/写锁;直到操作完毕,服务器再“自动”地为其解锁

显式锁由用户显式添加和释放

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值