锁的分类
2023-01-20 22:03:32 0 举报
AI智能生成
数据库中锁的分类
作者其他创作
大纲/内容
性能
乐观锁
使用版本控制来实现
比如在数据表中增加版本字段实现
MVCC
悲观锁
通过排他性来保证
粒度
表锁
每次操作锁住整张表
开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低
一般用在整表数据迁移的场景
操作
lock table 表名称 read(write),表名称2 read(write);
手动增加表锁
show open tables;
查看表上加过的锁
unlock tables;
删除表锁
存在于MyISAM、InnoDB引擎中;而且MyISAM只有这种锁,不支持事务
行锁
每次操作锁住一行数据
开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度最高
行锁是加在索引之上的,如果对非索引行做更新时,行锁会升级为表锁<br>
页锁
每次锁定相邻的一组记录
锁定粒度界于表锁和行锁之间,开销和加锁时间界于表锁和行锁之间,并发度一般
应用在BDB 存储引擎中
BDB引擎
操作类型<br>(都属于悲观锁)
读锁(共享锁,S锁)
针对同一份数据,多个读操作可以同时进行而不会互相影响
写锁(排他锁,X锁)
当前写操作没有完成前,它会阻断其他写锁和读锁
数据修改操作都会加写锁
意向锁(I锁,针对表锁)
主要是为了提高加表锁的效率
当有事务给表的数据行加了共享锁或排他锁,同时会给表设置一个标识,代表已经有行锁了
其他事务要想对表加表锁时,就不必逐行判断有没有行锁可能跟表锁冲突了,直接读这个标识就可以确定自己该不该加表锁
分类
意向共享锁,IS锁
对整个表加共享锁之前,需要先获取到意向共享锁
意向排他锁,IX锁
对整个表加排他锁之前,需要先获取到意向排他锁
0 条评论
下一页