MySQL(3)-锁机制

一、简介

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

概述

相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。
MySQL大致可归纳为以下3种锁:

  • 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
  • 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
  • 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

二、表锁(偏读)

表锁主要用在MyISAM引擎,有两种锁模式:读锁和写锁。

命令

手动加锁:

lock table 表名 read(write), 表名2read(write);

查看已加的锁:

show open tables;

释放表锁:

unlock tables;

读锁实例

会话session-1session-2
操作锁表:lock table a read;-
锁表可以查询,不能插入,更新可以查询锁表,插入或更新会阻塞,等待锁表释放
未锁表不能查询,插入,更新可以查询,插入,更新

写锁实例

会话session-1session-2
操作锁表:lock table a write;-
锁表可以查询,插入,更新查询,插入,更新会阻塞,等待锁表释放
未锁表不能查询,插入,更新可以查询,插入,更新

应用场景

数据表的迁移

三、行锁(偏写)

行锁主要用在InnoDB引擎,用法是 select for update

begin;
select * from user where id = 1 for update; 
#逻辑操作
commit;
会话session-1session-2
操作select * from user where id =1 for update-
正常执行-update,select for update操作 id != 1 行的数据,select 操作数据。
阻塞操作-select for update 操作id =1 的数据,update 操作id = 1的数据。

应用场景

库存并发操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

share_9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值