Mysql事务与锁详解

 

 

 

 

脏读:

 

不可重复读:

 

 幻读:

 

 

 锁:

 

 

 

表级别的意向锁为了提高效率,

我们能给一张表成功加上一个表锁的前提是:没有任何一个事务对这张表的某些行加了锁。

如果没有意向表锁:

如果现在要给一个表加上表锁。

如果这张表有一千万行数据,需要全表扫描行,是否有事务锁定了某行。

 

如果一张表不使用索引,那么加一个排他锁会锁定整张表。

会为每一行数据默认创建一个聚集索引,看起来好像锁定了整张表

 

 

 

多我们使用唯一索引锁定了一行数据的时候,此时使用主键索引获取该行的锁时,依然失败。

 在innodb中因为二级索引底层存储的依然是主键索引。

 

 

当我们使用范围查询的时候会加邻键锁 type=range

所命中的行的 左开右闭 和下一个 左开右闭区间

在innodb 推荐使用自增的id作为主键索引,在这种情况下 如果我们要去解决幻读的问题,一定要锁住下一个左开右闭区间      ?????

 

 

 

如果没有命中索引扫描全表锁住整张表

 

 

 

 

 

posted @ 2019-01-03 23:11  王凯华  阅读(6826)  评论(0编辑  收藏  举报