栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL的锁机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL的锁机制

目录

概述

分类

从对数据操作的粒度划分

从对数据操作的类型划分

MySQL不同存储引擎对锁的支持

MyISAM 表锁

添加表锁

加读锁

加写锁 

释放锁

InnoDB行锁

         行锁特点

行锁模式

共享锁(s)

排它锁(x)

操作 


概述

分类

从对数据操作的粒度划分

表锁:操作时,会锁定整个表,偏向于MyISAM储存引擎,开销小,加锁快,不会出现死锁;锁定粒度最大,发生锁冲突的概率高,并发度低.更适合于以查询为主,只有少量按索引条件更新数据的应用.

行锁:操作时,会锁定当前操作行,偏向于InnoDB存储引擎,开销大,加锁慢,会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也高.更适合于大量按索引条件并发更新少量不同数据,同时又有并查询的应用.

从对数据操作的类型划分

读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会相互影响.一旦添加读锁后,只可以操作添加读锁的表,不可以操作其他表,也不可以对当前的表进行修改,只可以查询

写锁(排它锁):当前操作没有完成之前,它会阻断其他写锁和读锁.当加了写锁后,别人是不可以对添加写锁的表进行查询和修改的

MySQL不同存储引擎对锁的支持

MyISAM 表锁

MyISAM存储引擎只支持表锁

添加表锁

MyISAM在执行查询语句前,会自动给涉及的所有表加读锁,在执行更新操作前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此,一般不需要直接用户LOCK TABLE命令给MyISAM表显式加锁.

加读锁
lock table table_name read;

加写锁 
lock table table_write write;

释放锁
unlock tables;

InnoDB行锁

行锁特点

偏向于InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度也最高,InnoDB与MyISAM的最大不同有两点:一是支持事务,二是采用了行级锁.

行锁模式

InnoDB实现了以下两种类型的行锁

共享锁(s)

又称为读锁,简称s锁,共享锁就是多个事务对于同一个数据可以共享一把锁,都能访问到数据,但是只能读不能修改.

排它锁(x)

又称为写锁,简称x锁,排它锁就是不能与其他锁并存,如一个事务获取了一个数据行的排它锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排它锁的事务时可以对数据就行读取和修改.

对于update delete insert 语句,InnoDB会自动给设计数据集加排它锁

对于select语句,InnoDB不会加任何锁

操作 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/726846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号