首页 > 数据库 >聊聊MySQL锁

聊聊MySQL锁

时间:2023-04-20 17:46:42浏览次数:44  
标签:加锁 记录 MySQL DML 索引 死锁 聊聊 DDL

操作

数据库的操作分两类,操作表(DDL)和操作表数据(DML)

DDL锁

MySQL5.6以前,没有发布OnlineDDL功能,执行DDL主要是通过copy和inplace,这两种方式都会全程锁表,无法执行DML
OnlineDDL就是执行DDL时可以同时执行DML

DML锁

DML操作会根据索引及数据变更等加相应锁

粒度

行级锁

加锁粒度最小,开销最大,锁冲突概率最低,并发度最高,会出现死锁

页级锁

锁的是一组相邻的记录,性能介于行锁表锁之间,会出现死锁

表级锁

加锁粒度最大,开销最小,锁冲突概率最高,并发度最低,不会出现死锁

级别

共享锁/读锁

加锁后能读不能写,一条数据可以加多个共享锁

排它锁/写锁

加锁后能读也能写,一条数据只能被加一个排它锁

使用方式

悲观锁

先加锁,再操作

乐观锁

先操作,冲突则直接失败

被锁对象

记录锁

RecordLock,锁定索引记录

间隙锁

GapLock,锁定索引记录之间的间隙,只有事务隔离级别为RR使用

临键锁

Next-KeyLock,是RecordLock和GapLock的组合,同时锁住索引记录和索引记录间隙,左开右闭

死锁

产生死锁的四个条件:

  • 互斥:一个资源只能被一个对象占用
  • 占有且等待:对象因为请求资源阻塞时,不释放已获得的资源
  • 不允许抢占:对象已获取的资源,未释放不能强行剥夺
  • 循环等待:多个对象形成首尾相连的等待关系

解除死锁四个条件破坏其中一个就好,一般破坏循环等待

show engine innodb status

标签:加锁,记录,MySQL,DML,索引,死锁,聊聊,DDL
From: https://www.cnblogs.com/xxhahn/p/17337678.html

相关文章

  • linux下安装mysql
    1、查看是否已经安装Mysqlrpm-qa|grepmysql2、上传mysql的安装包到linux下,(.tar.gz版本的)3、解压安装包tar-zxvfmysql-5.7.35-linux-glibc2.12-x86_64.tar.gz4、先检查是否有mysql用户组和mysql用户,没有就添加有就忽略:检查是否有mysql用户组:groupsmysql添加......
  • 在头部大厂做了23年云计算后,这次他想系统地聊聊FinOps!
    随着企业上云战略的深入普及,越来越多的企业开始关注云成本优化。伴随着企业对IT资源的投入不断增加,企业迫切需要解决成本与效率,以及如何将云成本优化落到实处的问题。FinOps是将财务和业务整合到一起的变革,可以帮助企业更好了解云成本和IT收益。4月25日晚20:00「UGeek大咖说·FinOps......
  • 基于SSM框架和MySQL的仿天猫商城
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]1.项目简介天猫商城是一个基于SSM框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。作为模拟天猫商城系统的核心组成部分之一,采用SSM框架......
  • MySQL GTID 主从复制错误修复方法
    MySQL传统的主从复制方式使用master_log_files和master_log_pos两个参数来确定复制位点。当出现复制错误时,可以设置跳过出错的事务来恢复同步,MySQL提供了sql_slave_skip_counter参数来实现此功能。使用方法如下:root@(none)>stopslave;QueryOK,0rowsaffected(0.0......
  • Mysql语法
    树形结构通过节点获取节点所有上级(函数)1createfunctionget_department_list(in_idint)returnsvarchar(100)2READSSQLDATA3begin4declareidsvarchar(1000);5declaretempidint;67settempid=in_id;8whiletempid>0d......
  • MySQL使用过程中常见问题的解决
    问题1:root用户密码忘记,重置的操作、1:通过任务管理器或者服务管理,关掉mysqld(服务进程)2:通过命令行+特殊参数开启mysqldmysqld--defaults-file="D:\ProgramFiles\mysql\MySQLServer5.7Data\my.ini"--skip-grant-tables3:此时,mysqld服务进程已经打开。并且不需......
  • MySQL: 为什么使用 innobackupex 备份恢复搭建主从时,必须人为设置 gtid_purged 变量
    问题描述:使用innobackupex搭建主从的步骤如下:1.主库使用innobackupex备份并apply-log2.将备份文件拷贝至从库,从库清空datadir目录,并使用innobackupex进行copy-back3.从库根据备份目录中的xtrabackup_binlog_info的GTID信息来设置gtid_purged变量。4.从库changem......
  • 48 结束语 | 点线网面,一起构建MySQL知识网络
    时光流逝,这是专栏的最后一篇文章。回顾整个过程,如果用一个词来描述,就是“没料到”:我没料到文章这么难写,似乎每一篇文章都要用尽所学;我没料到评论这么精彩,以致于我花在评论区的时间并不比正文少;我没料到收获这么大,每一次被评论区的提问问到盲点,都会带着久违的兴奋去分析代码。......
  • 47 直播回顾 | 林晓斌:我的 MySQL 心路历程【无音频】
    在专栏上线后的11月21日,我来到极客时间做了一场直播,主题就是“我的MySQL心路历程”。今天,我特意将这个直播的回顾文章,放在了专栏下面,希望你可以从我这些年和MySQL打交道的经历中,找到对你有所帮助的点。这里,我先和你说一下,在这个直播中,我主要分享的内容:我和MySQL打交道的经历;......
  • MySQL常用命令
    查询所有数据库名![image]showdatabases;(https://img2023.cnblogs.com/blog/2805463/202304/2805463-20230420144431240-201364771.png)(使用哪个数据库)use[databasename];(查询数据库下的所有表名)showtables;(查询表中数据)select*from[tablename];(查询表结构)des[tab......