MySQL的锁机制

MySQL的锁机制,第1张

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不会加任何锁

*** 作 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5722187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存