1.运用同样索引键值的争持

 

会话1

会话2

SELECT @@tx_isolation

@@tx_isolation

REPEATABLE-READ

SELECT @@tx_isolation

@@tx_isolation

REPEATABLE-READ

SET autocommit=0;

SET autocommit=0;

— 当前会话对不存在的记录加 for update;

SELECT * FROM city WHERE city_id=102 FOR UPDATE;

 

 

如果这里插入的值>=102就会出现阻塞

INSERT INTO city VALUES(200,2,’江门’,’005′)

错误代码: 1205

Lock wait timeout exceeded; try restarting transaction

 

ROLLBACK;

 

 

INSERT INTO city VALUES(200,2,’江门’,’005′)

共 1 行受到影响

会话1

会话2

SET autocommit=0;

SET autocommit=0;

SELECT * FROM city WHERE city_id=14 AND Cityname=’深圳’ FOR UPDATE;

city_id      country_id        cityname CityCode

14     2       深圳         001

 

 

会话2与会话1访问的是不同的记录,但是因为使用了相同的索引值,所以需要等待锁

SELECT * FROM city WHERE city_id=14 AND Cityname=’长沙’ FOR UPDATE;

等待…

会话1

会话2

SET autocommit=0;

SET autocommit=0;

SELECT * FROM city WHERE city_id=14  FOR UPDATE;

city_id      country_id        cityname CityCode

14     2       深圳         001

 

 

该记录没有被索引,所以可以获得锁

SELECT * FROM city WHERE  CityCode=’002′ FOR UPDATE;

city_id      country_id        cityname CityCode

15     2       长沙         002

 

由于该记录被会话1锁定,所以需要等待

SELECT * FROM city WHERE  CityCode=’001′ FOR UPDATE;

等待…

  是因为mysql
的行锁是指向索引加的锁,不是针对记录加的锁,所以固然是访谈不相同行的笔录,但借使是选用同样的索引键,是会出现锁龃龉的。设计时要留意
  例如:city表city_id字段有目录,Cityname字段未有索引:

   固然查询利用如下sql
  select * from city where city_id>100 for update;

  当表有四个目录时候,区别的事务能够利用差异的目录锁定差别的行,无论怎么索引,innodb都会利用行锁来对数码加锁。
  例如city表city_id字段有主键索引,CityCode字段有平凡索引:

图片 1

4. 空闲锁(next-key锁) 并发下要入眼思考

3. 开立了目录,但利用的是表锁
  在眼下章节说过,创造了索引但不走索引的意况,这种状态下innodb将应用表锁,实际不是行锁,因些深入分析锁争辨时,还需检查sql的推行布署,以确认是还是不是真的使用了目录。

         当大家用范围条件并非非常条件检索数据,并恳请分享或排它锁时,innodb会给相符条件的已有多少记录的目录项加锁;对于键值在标准化限制内但并不设有的笔录就称为”间隙锁”  譬喻city表数据布满如下:

  那就是三个限制条件的追寻,
innodb不但会对切合条件的101的笔录加锁,也会对city_id大于101(即使记录并海市蜃楼)的”间隙”加锁。使用间隙锁的指标是为了以免万一幻读,以满意相关的割裂品级。关于幻读查看”sql
开垦进级篇连串 6 锁难题(事务与隔断等第介绍)”
很引人注目,在选拔范围条件的物色记录时,
会阻塞切合条件范围内键值的产出插入,往往产生深重的锁等待。在落成工作中尽量利用万分条件来搜寻数据。还需注意如查使用非常条件检索的数量不设一时,也会加间隙锁。
  为了堤防幻读,mysql隔开分离品级必须是REPEATABLE-READ和Serializable。REPEATABLE-READ也是暗中认可的割裂品级。

1.应用一样索引键值的龃龉

 2.行使分裂索引键值不过同一行的争辨 

相关文章