行锁是如何加上的?
当前读和快照读:
cru加了排他锁。
--------------------------------------------------------------------------------------------------
聚集索引:
主键索引:
---------------------------
隔离级别详解。
脏读 可重复读 幻读
读提交:RC
可重复读:RR
------------------
加锁的分类:
具体的看文档即可。
聚集索引/聚簇索引:
主键索引 (InnoDB必须有),叶子节点的名称是主键,值是一行数据
次要(第二/辅助)索引,叶子节点的名称是索引列的名称,叶子节点的值是主键。
回表。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
组合1:id是主键 ,读提交
id是主键时,此SQL只需要在id=10这条记录上加X锁即可。只能读历史版本,不可能产生读 未提交的事情。
组合2:id是二级的唯一索引,读提交
一个知识点:快照读读的是可见的版本,当前读读的是最新的版本。
这个组合现在看不懂了,看下极客时间:https://time.geekbang.org/column/article/68963
可重复读就是在事务期间看到的是一样的。
读提交就是只有对方提交了我才能看到,否则就是快照读。
组合3:id是二级非唯一索引,读提交
看下非唯一索引
上面那个表格:第一行就是非主键不唯一id列的所有的值,第二行是主键的值。
下面那个表格:第一行是主键的值,第二行是主键这一行的所有值。
此时加锁加的是多条记录。
出现幻读:
不可以脏读但是可以幻读的。
MVCC的什么特征:读不加锁,读写互不影响。
组合4:没有索引,读提交
因为是删除的操作,走全表扫描,全表都会加排他锁的。但是加锁不符合条件的立马就放开锁。
----------------------------------------------------------------------------------------------------------------------------------------------------
RR级别的。
组合7:id是二级的非唯一索引,可重复读的隔离级别。
这里的间隙指的是:6-10 10-10 10-11
不只是在两个10上加x锁,还要在间隙上加锁。
组合8:
很可怕的。
-------------------------------------------------------------------------------------------------------------------------------------------------
下半节课
--------------------------------------------------------------------------------------------------------------------------------------------------
最左前缀:最左边的字段必须要加入到索引中,否则就走的是全表扫描。
知识点:组合索引的前面的字段如果使用的是范围搜索,那么在它后面的字段不会在搜索中使用到的。
知识点:整个where条件中如果有多个字段有索引,那么只会选择一个索引使用。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
死锁情况1:
死锁情况2:
加锁的话查出来就解开了?
--------------------------------------------------------------------------------------------------------------------------
B+tree。
组合索引是最有效的节省空间的。