ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql锁的类型有哪些

2021-08-05 21:59:18  阅读:171  来源: 互联网

标签:事务 加锁 哪些 行锁 锁住 Mysql 类型 数据 id


从锁的属性分类:

共享锁: 共享锁又称读锁,简称 S锁,当一个事务为数据加上读锁后,其他事务也只能这些数据加读锁,不能加写锁,当所有事务都释放锁后,才能对这些数据加写锁;主要是为了支持并发读取数据,读取数据时不支持修改数据,避免重复读的问题;
排他锁: 排他锁又称写锁,简称 X锁,当一个事务为数据加上写锁后,其他事务不能再对这些数据加任何锁,直到该锁释放后,其他事务才能加锁;目的是为了修改数据的时候,、不允许其他人同时修改,也不允许其他人读数据,避免数据出现脏读的情况;

从锁的粒度分类

表锁(InnoDB,MylSAL) : 锁的是整张表,当一个事务锁住该表时,其他事务不能访问该表,必须等表锁释放后,才能正常访问表数据;特点是粒度大,虽然加锁简单,但容易冲突;
行锁(InnoDB) : 上锁的时候锁住的是表的某一行或多行记录,其他事务访问同一张表时,只有锁住的记录不能访问,其他数据可以正常访问; 特点是粒度小,比加表锁麻烦,不容易冲突,比表锁支持的并发高;
记录锁: 行锁的一种,只能锁住表中的某一条记录,并且必须是条件精准命中和命中的条件是唯一索引字段;也是避免了脏读的问题;
页锁: 锁住的是相邻的一组数据, 开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般;
间隙锁: 行锁的一种,锁住的是一定区间的数据,假如 SELECT * FROM table WHERE id BETWEN 1 AND 10 FOR UPDATE; 那么锁住的数据就是 (1,4]左开右闭这个区间的数据;即使没有 id为3的数据,但 3 这个间隙也会锁住,假如要 insert 一条 id = 3的记录那么就会失败,这种也是避免出现幻读的情况;
临建锁: : 行锁的一种, 如间隙锁类似,不同点事它锁住的区间是闭合区间;假如如 SELECT * FROM table WHERE id BETWEN 1 AND 10 FOR UPDATE; 那么锁住的数据就是 [1,4];
也避免幻读,脏读的情况;

TODO:

标签:事务,加锁,哪些,行锁,锁住,Mysql,类型,数据,id
来源: https://blog.csdn.net/qq_38845271/article/details/119426988

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有