MySql中的锁

MySql中的锁

从锁的粒度分

  1. 行锁 :行锁粒度小,但加锁资源开销比较大,InnoDB支持
    从锁的排他性分
    1.1 共享锁读锁 ):多个事务可以对同一个数据共享一把锁,但是只能读不能修改。select XXX lock in share mode会加共享锁。普通的select是无锁的。在串行化级别下,普通select语句会自动加上共享锁。
    1.2 排他锁写锁):只有一个事务可以获得排他锁。InnoDB会对update/insert/delete语句自动加排他锁。select XXX for update 会加排他锁。
  2. 表锁 :表锁粒度大,但加锁资源开销比较小,MyISAM和InnoDB都支持
    从锁的排他性分
    2.1 共享锁读锁 ):同上
    2.2 排他锁写锁 :同上
    2.3 意向锁:InnoDB自动添加的锁。比如当向表中添加行锁时,InnoDB会在表上添加意向锁,此时如果需要加表排他锁就不需要逐条记录判断是否有锁,只需查看意向锁即可。
  3. 全局锁:加锁之后整个数据库实例都处于只读状态,所有数据变更操作都会被挂起,一般用于全库备份的时候。

从锁的算法分

  1. 记录锁:锁一条具体的数据。update XXX set XXX where id = XXX
  2. 间隙锁:锁住一个区间。RR级别下才会有间隙锁。为了防止幻读。update XXX set XXX where id > 10 and id <30范围更新会锁住间隙。 比如id字段有1,10,20三条记录。在RR级别下会分成(负无穷,1)(1,10)(10,20)(20,正无穷)这几个区间,update区间内不存在的记录,会锁住整个区间。
  3. 临键锁(Next-key):间隙锁+右记录锁。MySql在实际中会使用临建锁而不是间隙锁。即(负无穷,1](1,10](10,20](20,正无穷)

自增锁

针对MySql当中的自增字段。自增序列不可以回滚,因此会有不连续的情况。

相关推荐
冰清-小魔鱼9 分钟前
各类数据存储结构总结
开发语言·数据结构·数据库
深藏bIue41 分钟前
MongoDB 4.4.30安装、数据迁移
数据库·mongodb
benyuanone1 小时前
MySQL环境项目迁移成国产化达梦环境
数据库·mysql
北凉军1 小时前
java连接达梦数据库,用户名是其他库的名称无法指定库,所有mapper查询的都是以用户名相同的库内的表
java·开发语言·数据库
尽兴-1 小时前
MySQL索引优化:从理论到实战
数据库·mysql·优化·b+树·索引·最左前缀
ZKNOW甄知科技1 小时前
IT自动分派单据:让企业服务流程更智能、更高效的关键技术
大数据·运维·数据库·人工智能·低代码·自动化
小光学长2 小时前
基于Web的长江游轮公共服务系统j225o57w(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库
Davina_yu2 小时前
2026年节假日表SQL
数据库·sql
是娇娇公主~2 小时前
工厂模式详细讲解
数据库·c++
天码-行空3 小时前
Linux 系统 MySQL 8.0 详细安装教程
linux·运维·mysql