锁是锁住主键和索引,如果sql语句里面没有主键和索引,就会锁表。
1、共享锁:允许同时读,不允许写 lock in share mode
2、排他锁(S锁,独占锁):默认insert、delete、update语句会自动加for update,,在查询时要在sql语句末尾手动加上for update才加上排他锁。
3、意向共享锁,在加上共享锁会去判断有没有意向共享锁。(思想)
4、意向排他锁,在加上排他锁会去判断有没有意向排他锁。(思想)
基于行锁的算法
5、临键锁 : sql查询在某一范围查询时,锁住的是左开右闭区间(根据主键或索引划分),同时避免了幻读(在读取时插入了一条数据)。默认的锁。
6、间隙锁,sql查询不在某一范围查询时,锁住的是左开右开区间(根据主键或索引划分)。
7、记录锁,sql查询等于某一值时,锁住的是该记录条数。