当前位置: 首页 > news >正文

mysql锁怎么控制并发_Mysql并发控制-锁

Mysql并发控制-锁

共享锁

共享锁也称为读锁,读锁允许多个连接可以同一时刻并发的读取同一资源,互不干扰。

排他锁

排他锁也称为写锁,一个写锁会阻塞其他的写锁或读锁,保证同一时刻只有一个连接可以写入数据,同时防止其他用户对这个数据的读写。

锁策略

table lock(表锁)

表锁是mysql最基本的锁策略,也是开销最小的锁,加锁快,会锁定整个表。

通常发生在DDL语句和不走索引的DML语句。

update table set columnA = "a" where columnB = "b";

如果上述sql语句中columnB字段不存在索引或者不是组合索引前缀,会进行锁表操作。

如果columnB字段创建索引后,那么会锁住满足where条件的行(行锁)。

row lock (行锁)

行锁可以最大限度的支持并发处理,当然也带来了最大开销,加锁慢,行锁的粒度在每一行数据。

InnoDB行锁是通过给索引上的索引项加锁来实现的:只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表锁。

不论是主键索引、唯一索引或者普通索引,InnoDB都会使用行锁来对数据加锁。

只有执行计划真正使用了索引,才能使用行锁,可以通过explain来检查SQL的执行计划。

如果多个session访问不同行的记录,使用了相同的索引键,是会出现索引冲突的。

InnoDB 间隙锁

当我们用范围条件而不是相等检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但是并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个间隙加锁,这种锁机制就是间隙锁(Next-Key锁)。

很显然,在使用范围条件检索并锁定记录时,InnoDB这种加锁机制会阻塞符合条件范围内键值得并发插入,造成严重的锁等等。所以应尽量使用相等条件访问更新数据。

间隙锁的目的:

防止幻读,以满足相关隔离级别的要求;

满足恢复和复制的需要。

显式锁 与 隐式锁

隐式锁:我们上文说的锁都属于不需要额外语句加锁的隐式锁。

显示锁:

SELECT ... LOCK IN SHARE MODE(加共享锁);

SELECT ... FOR UPDATE(加排他锁);

相关文章:

  • yii的ActionForm组件
  • java调用python爬虫_Java调用Python爬虫
  • 移动端如何用swiper实现导航栏效果
  • mysql undo_mysql 的undo 表空间
  • linux 后台开发类常见问题及知识点
  • mysql无法存 x_mySQL如果X Y不保存信息
  • mysql查询语句能用吗_基于mysql查询语句的使用详解
  • C语言程序设计第四次作业——选择结构(2)
  • 数组不能以什么形式参与运算_EXCEL知识:数组运算是什么?
  • python内置函数it_Python标准库:内置函数iter(object[, sentinel])
  • CentOS yum 源的配置与使用
  • regain搜索引擎_精致的桌面全文搜索引擎regain安装配置简介
  • centos系统配置mysql服务起不来_CentOS7安装mysql后无法启动服务,提示Unit not found...
  • github
  • mysql 5.5 创建用户_MySQL_在Centos 5.5 上编译安装mysql 5.5.9,创建mysql用户 [root@xuhost opt]# use - phpStudy...
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • es6要点
  • Javascript Math对象和Date对象常用方法详解
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • nodejs实现webservice问题总结
  • yii2权限控制rbac之rule详细讲解
  • 免费小说阅读小程序
  • 普通函数和构造函数的区别
  • 系统认识JavaScript正则表达式
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 如何正确理解,内页权重高于首页?
  • #微信小程序:微信小程序常见的配置传值
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (九)c52学习之旅-定时器
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转载)Google Chrome调试JS
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net 7 上传文件踩坑
  • .net core 依赖注入的基本用发
  • .Net IE10 _doPostBack 未定义
  • .Net Web窗口页属性
  • .NET 解决重复提交问题
  • .NET 使用配置文件
  • .NET分布式缓存Memcached从入门到实战
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .NET中两种OCR方式对比
  • .NET中统一的存储过程调用方法(收藏)
  • .net中应用SQL缓存(实例使用)
  • @angular/cli项目构建--Dynamic.Form
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [go 反射] 进阶
  • [JavaEE]线程的状态与安全
  • [LeeCode]—Wildcard Matching 通配符匹配问题
  • [Leetcode] 寻找数组的中心索引
  • [MySQL]数据库基础