mysql锁

Posted 遥远2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql锁相关的知识,希望对你有一定的参考价值。

1、mysql innoDB默认使用 行级锁可重复读(Repeated Read)的隔离级别。

1)、只有在通过索引条件查询时,才使用行级锁,否则使用的是全表锁。意味着如果没有使用索引的查询使用的是全表锁。

  这里的索引包含:主键索引、唯一索引、普通索引。即所有索引。

2)、使用相同的索引,即使查询不同的行,会造成死锁。

3)、执行sql前,mysql先判断执行计划,然后决定是否使用索引行锁。比如:一张表数据量很小,查询时采用的是全表锁,而并没有使用索引,即并未使用行锁。

 

2、加锁策略

1)、隐式加锁

  • 对于update/delete/insert,InnoDB会自动给涉及数据集加排他锁(X)。
  • 对于select,InnoDB不会加任何锁。

2)、显式加锁

  • 共享锁:SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE
  • 排他锁:SELECT * FROM table_name WHERE ... FOR UPDATE

共享锁:对查询出来的行数据,加共享锁后,其他人也可以读取到,但是不能update/delete。

排他锁:获取到符合条件的某些行后,如果对这些行接着执行update操作时,需要使用排他锁。

 

因此,尽可能的使用索引查询。

 

以上是关于mysql锁的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 进阶 锁 -- MySQL锁概述MySQL锁的分类:全局锁(数据备份)表级锁(表共享读锁表独占写锁元数据锁意向锁)行级锁(行锁间隙锁临键锁)

mysql插入意向锁测试

关于mysql 共享锁和排他锁 互斥问题?

怎么给mysql加排他锁

Mysql加锁过程详解-基本知识

浅谈Mysql共享锁排他锁悲观锁乐观锁及其使用场景