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

mysql进阶(七)数据库锁

什么是锁?

对数据操作的类型:

1.表锁:

偏向myISAM存储引擎,开销小,加锁块;无思索;锁定粒度大,发生锁冲突的概率最高,并发度最低;

读锁:共享读操作,但是不能进行写操作


-- 给表加锁
 lock table 表名1  read,表名2 write;
-- 查看表的加锁情况
show open tables ;
-- 解锁
unlock tables;

写锁:只能写,不能读

 

如何分析表锁定:

可以通过下面状态变量来分析系统上的表锁定。

 show status like 'table%';

 Table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数,每立即获取锁值加1;
 Table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),此值高则说明存在着较严重的表级争用的情况

2.行锁

偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁粒度最小,发生锁冲突的概率最低,并发度也最高。

innodb和myisam最大的不同:是支持事务,采用行级锁

 脏读:

不可重复读:

幻读:

 

事务隔离级别:

 

涉及到的表:

create table test_innodb_lock(a int(11),b varchar(16)) engine=innodb;
insert into test_innodb_lock  values(1,'b2');
insert into test_innodb_lock  values(2,'3');
insert into test_innodb_lock  values(4,'40000');
insert into test_innodb_lock  values(5,'5000');
insert into test_innodb_lock  values(6,'6000');
insert into test_innodb_lock   values(7,'7200');
insert into test_innodb_lock  values(8,'8000');
insert into test_innodb_lock  values(9,'9000');
insert into test_innodb_lock  values(10,'1000');
insert into test_innodb_lock  values(1,'b1');

 create index test_innodb_b_ind on test_innodb_lock(b);
 create index test_innodb_a_ind on test_innodb_lock(a);

行锁变成表锁:varchar类型没有加,单双引号;session2阻塞了;

 

间隙锁 

 如何锁定一行:

 

 

行锁的分析:

通过检查innodb_row_lock状态变量来分析系统上的行锁的争夺情况

show status like 'innodb_row_lock%';

总结:

 

页锁:

相关文章:

  • caffe问题
  • HDU 6330--Visual Cube(构造,计算)
  • mysql 数据库修改名字
  • 设计模式-简单工厂、工厂方法模式、抽象工厂模式详解
  • 9种数据分析方法
  • 人群估值一般性算法
  • oracle获取过去两年的今天时间
  • SOFATracer 中 Disruptor 实践
  • C#抽象类与接口的区别【转】
  • 区块链时代的拜占庭容错:Tendermint(一)
  • 一致性算法Hash(Consistent Hashing)
  • Java 多线程
  • 微信小程序登录JAVA后台
  • yii2.0 验证码
  • Weakpass
  • 《深入 React 技术栈》
  • AngularJS指令开发(1)——参数详解
  • AWS实战 - 利用IAM对S3做访问控制
  • CentOS7 安装JDK
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • React组件设计模式(一)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Vue 重置组件到初始状态
  • vue脚手架vue-cli
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从输入URL到页面加载发生了什么
  • 反思总结然后整装待发
  • 前嗅ForeSpider教程:创建模板
  • 实现简单的正则表达式引擎
  • 使用common-codec进行md5加密
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 我感觉这是史上最牛的防sql注入方法类
  • 怎么将电脑中的声音录制成WAV格式
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #13 yum、编译安装与sed命令的使用
  • #etcd#安装时出错
  • $jQuery 重写Alert样式方法
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (接口封装)
  • (六)vue-router+UI组件库
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十六)串口UART
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • ./configure、make、make install 命令
  • .NET 指南:抽象化实现的基类
  • .net操作Excel出错解决
  • .NET下ASPX编程的几个小问题
  • .NET项目中存在多个web.config文件时的加载顺序
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @RequestParam,@RequestBody和@PathVariable 区别