Mysql事务与锁详解
脏读:
不可重复读:
幻读:
锁:
表级别的意向锁为了提高效率,
我们能给一张表成功加上一个表锁的前提是:没有任何一个事务对这张表的某些行加了锁。
如果没有意向表锁:
如果现在要给一个表加上表锁。
如果这张表有一千万行数据,需要全表扫描行,是否有事务锁定了某行。
如果一张表不使用索引,那么加一个排他锁会锁定整张表。
会为每一行数据默认创建一个聚集索引,看起来好像锁定了整张表
多我们使用唯一索引锁定了一行数据的时候,此时使用主键索引获取该行的锁时,依然失败。
在innodb中因为二级索引底层存储的依然是主键索引。
当我们使用范围查询的时候会加邻键锁 type=range
所命中的行的 左开右闭 和下一个 左开右闭区间
在innodb 推荐使用自增的id作为主键索引,在这种情况下 如果我们要去解决幻读的问题,一定要锁住下一个左开右闭区间 ?????
如果没有命中索引扫描全表锁住整张表