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

操作 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值