目录
概述
分类
从对数据操作的粒度划分
从对数据操作的类型划分
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不会加任何锁