当前位置: 首页 > news >正文

Mysql的锁

加锁的目的

        对数据加锁是为了解决事务的隔离性问题,让事务之前相互不影响,每个事务进行操作的时候都必须先加上一把锁,防止其他事务同时操作数据。

事务的属性 (ACID)

原子性 一致性 隔离性 持久性

事务的隔离级别

锁是基于什么实现的 

数据库里面的锁是基于索引实现的,在Innodb中我们的锁都是作用在索引上面的,当我们的SQL命中索引时,那么锁住的就是命中条件内的索引节点(行锁),如果没有命中索引的话,那我们锁的就是整个索引树(表锁)

锁的级别

在MySQL中,锁的级别可以分为行级锁、表级锁和数据库级锁三种。

行级锁(Row-Level Lock):它是对数据库中的某一行数据进行锁定,只有在获得锁的事务才能访问和修改该行数据。行级锁可以提高并发性,但是需要消耗更多的系统资源。

表级锁(Table-Level Lock):它是对整个表进行锁定,只有获得锁的事务才能访问和修改表中的数据。表级锁可以减少锁冲突,但是可能会降低并发性。

数据库级锁(Database-Level Lock):它是对整个数据库进行锁定,只有获得锁的事务才能访问和修改数据库中的数据。数据库级锁可以用于对整个数据库进行备份和恢复操作。


锁的分类

按照属性分

1.共享锁:也称读锁,简称S锁,当一个事务对数据加上读锁之后,其他事务只能对该数据加读锁,而无法对数据加写锁(排他锁),直到所有读锁释之后其他事务才能对其进行写锁(排他锁)

2.排他锁:也称写锁,简称X锁,当 一个事务对数据加上写锁之后,其他事务将不再为数据加任何锁,直到该锁释放之后其他事务才能对数据进行加锁。

按照粒度分类

1.表锁

        表锁是指上锁的时候锁住的是整个表,当下一个事务访问该表的时候,必须等前一个释放了锁才能进行对表进行访问。

2.行锁

        记录锁、间隙锁、临键锁

状态锁

定义

状态锁包括意向共享锁和意向排他锁,把他们区分为状态锁的一个核心逻辑,是因为这两个锁都是描述是否可以对某一个表进行加表锁的状态

包括

1.意向共享锁IS

2.意向排他锁IX

使用

1.上表级别的S锁,如果表上没有IX,说明表中没有记录有独占锁,其实就可以直接上表级S锁

2.上表级别的X锁,如果表上没有IX和IS,说明表中的所有记录都没加锁,其实就可以直接上表级X锁。

http://www.lryc.cn/news/104869.html

相关文章:

  • 【EI/SCOPUS征稿】2023年算法、图像处理与机器视觉国际学术会议(AIPMV2023)
  • Go语言性能优化建议与pprof性能调优详解——结合博客项目实战
  • K阶斐波那契数列(数据结构)
  • 【JavaEE】博客系统前后端交互
  • Redis 简介
  • CS162 13-17 虚拟内存
  • 接口自动化测试-Jmeter+ant+jenkins实战持续集成(详细)
  • 最长连续序列——力扣128
  • uniapp app端 echarts 设置tooltip的formatter不生效问题以及解决办法
  • Spring入门-技术简介、IOC技术、Bean、DI
  • 深度学习之反向传播
  • 网络安全 Day23-mariadb数据库数据管理和备份
  • Centos7 上安装 redis-dump 和redis-load 命令
  • 【NLP PyTorch】字符级RNN循环网络模型姓氏对应国家分类(项目详解)
  • C++设计模式之责任链设计模式
  • 《Java-SE-第二十三章》之单例模式
  • 如何快速同步第三方平台数据?
  • 反射(一)
  • 29.利用fminbnd 求解 最大容积问题(matlab程序)
  • express学习笔记7 - docker跟mysql篇
  • Leetcode(一):数组、链表部分经典题目详解(JavaScript版)
  • 内网穿透的底层原理是什么
  • Bash配置文件
  • 写Acknowledgement的时候,latex日志出现警告
  • GCC生成map文件
  • IOS看书最终选择|源阅读转换|开源阅读|IOS自签
  • easyui实用点
  • 算法训练营第五十六天||● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇
  • C语言每日一题:10.不使用+-*/实现加法+找到所有数组中消失的数。
  • LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443