锁主要是在多用户情况下保证数据库数据完整性和一致性。
锁的分类
| 分类属性 | 具体类型 |
|---|---|
| 锁模式分类 | 乐观锁、悲观锁 |
| 范围锁 | 行锁、表锁 |
| 算法锁 | 临间锁、间隙锁、记录锁 |
| 属性锁 | 共享锁、排他锁 |
| 状态锁 | 意向共享锁、意向排他锁 |

update时会锁,delete时会锁,insert时不会锁。条件命中索引锁行,未命中索引锁全表。
行锁
行锁的触发是命中索引,条件命中几条就会锁几条。
-
特征:锁冲突概率低,并发性高,但是可能出现死锁。
-------------窗口A------------------- -- 关闭自动提交事务 set autocommit = 0; SELECT * from section where id = 2; -- 修改第二行插入者id update section SET insertor = 1 where id = 2; --------------窗口B------------------- -- 关闭自动提交事务 set autocommit = 0; -- 可以查询,查询出原来的结果 SELECT * from section where id = 2; -- 修改第二行插入者id update section SET insertor = 3 where id = 2; -- [SQL]update section SET insertor = 3 where id = 2; -- [Err] 1205 - Lock wait timeout exceeded; try restarting transaction -- 这行被锁住了无法更新。 --------------窗口C------------------- -- 关闭自动提交事务 set autocommit = 0; SELECT * from section where id = 3; -- 修改另一行的插入者id update section SET insertor = 3 where id = 3; -- 可以被正常更新
表锁
表锁响应的是非索引字段,只要有非索引字段进行匹配就会锁全表
- 特征:锁冲突几率低,不会出现死锁。
本文深入解析了数据库中锁的作用及分类,包括乐观锁与悲观锁的概念、行锁与表锁的区别及其应用场景。通过实例展示了不同类型的锁如何影响并发操作。
1164

被折叠的 条评论
为什么被折叠?



