问题:请讲下在mysql中的锁mysql
分析:该问题主要考察对中锁的掌握,主要考察的是读、写锁、行锁、间隙锁、next-key,其余还有表锁、意向锁sql
回答要点:线程
主要从如下几点去考虑,索引
一、mysql中的锁有哪些?事务
二、每种锁的使用场景?innodb
mysql种的锁主要有读写锁、行锁、间隙锁、next-keydate
读锁select
读锁,又叫共享锁,简称S锁,用在读操做上,事务A对数据加上了S锁,那么事务A只能进行读操做,其余事务包括A不能再对数据加X锁,可是能够加S锁;next
例,select ... in share mode数据
写锁
写锁,又叫排他锁,简称X锁,用在写操做上,事务A对数据加了X锁,那么事务A能够对数据进行读取和更新操做,其余线程不能对数据加S锁或X锁,也就是说X锁是排他的,这里的排他是其余的任何锁;
例,select .... for update
行锁
在mysql中读写锁都是行锁,通俗点讲就是锁住的是数据行,这点区别于myIsam的表锁,锁住整个表。innodb下的行锁是经过锁住索引上的索引项来实现的,若是没有索引则锁住每行隐藏的ID
间隙锁
间隙锁,顾名思义,就是锁住的一个范围,间隙锁也是行锁的一种,因此锁定的也是索引项中间的间隙;
next-key锁
next-key就是行锁+间隙锁,也就是锁住记录和它前面的间隙,例,select * from t where id<=7 id的值有1 2 7则(2,7]这就是一个next-key
mysql这种行锁的特色意味着若是查询条件中不走索引,那么innodb将对全部的记录加锁,实际效果跟锁表是同样的(不是表锁)
读写锁主要用在事务的隔离级别上,经过设置读写锁能够实现数据的隔离;
next-key则是用在隔离级别为可重复读下,用来解决幻读;