mysql数据库中存在三种锁,间隙锁(gap-lock) , 行锁(record-lock),gap-record-lock

gap-record-lock 是间隙锁和行锁的组合,

间隙锁(gap lock)

行锁(record lock)

record-lock:

测试表:

CREATE TABLE `tt` (

`tid` int(11) NOT NULL DEFAULT '0',

`tname` varchar(10) DEFAULT NULL,

`tage` tinyint(4) DEFAULT NULL,

`taddr` varchar(100) DEFAULT NULL,

`tmark` varchar(1000) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

无论在什么隔离级别下,以下操作都是要获取表的metadata锁的

truncate,DDL(alter,drop,create),添加索引 会对表添加metadata锁,也就是会锁定整张表

在隔离级别是rr的情况下,delete,update,insert的锁的表现形式

delete from tt where tid = 1

update tt set taddr = "BeiJing" where tid = 1

1.tid为主键

(1).1存在于表中就对记录添加record-lock

(2).1不存在于表中gap-lock,行记录的间隙锁

2.tid为普通字段(没有索引)就对所有记录添加,record-lock,grap-lock

3.tid为非聚集唯一索引

(1).1存在于表中就对记录添加record-lock,会锁定索引值和行数据

(2).1不存在于表中就添加gap-lock,会锁定索引的某一个范围值

4.tid为非聚集非唯一索引

(1).1存在于表中就添加record-lock,gap-lock,会对行记录,索引记录添加record-lock,会锁定索引的某一个范围

(2).1不存在于表中,会锁定索引的某个范围

insert

添加意向插入锁,检查某个范围是否被锁定

间隙锁只会影响插入,不会影响update和delete

1.只有主键对记录添加X锁

2.有唯一键,会对唯一键值添加S锁

3.有主键和唯一键,对主键值添加x,对唯一键值添加s

insert into test1  select * from test

在rr情况下test 添加的是s锁,test1 添加的X

在隔离级别是rc的情况下,delete,update,insert的锁的表现形式

delete from tt where tid = 1

update tt set taddr = "BeiJing" where tid = 1

1.tid为主键

(1).1存在于表中就对记录添加record-lock

(2).1不存在于表中,不添加锁

2.tid为普通字段(没有索引)就对所有记录添加锁

3.tid为非聚集唯一索引

(1).1存在于表中就对记录添加record-lock,会锁定索引值和行数据

(2).1不存在于表中不锁定数据

4.tid为非聚集非唯一索引

(1).1存在于表中就添加record-lock,会对行记录,索引记录添加record-lock

(2).1不存在于表中不添加锁

insert

1.只有主键对记录添加X锁

2.有唯一键,会对唯一键值添加S锁

3.有主键和唯一键,对主键值添加x,对唯一键值添加s

insert into test1  select * from test

在rc隔离级别下 test1中没有数据的情况下test ,test1 不添加锁

在rc隔离级别下 test1中有数据的情况下test ,不添加锁 ,test1 加S表所

select *  into outfile  from  test   不锁定test表(rr,rc都有验证)

转载于:https://blog.51cto.com/dwchaoyue/1879590

mysql 隔离级别和锁相关相关推荐

  1. Mysql隔离级别、锁及死锁

    一.MySQL常用存储引擎 MyISAM:5.1及之前默认的存储引擎,不支持事务.外键:只有索引缓存(index buffer):提供表级锁,只有select语句时不锁,其他情况上锁:适于select ...

  2. mysql隔离级别与锁,接口并发响应速度的关系(2)

    innoDB默认隔离级别 mysql> SELECT @@tx_isolation; +-----------------+ | @@tx_isolation | +-------------- ...

  3. mysql隔离级别与锁的关系

  4. 事物的级别_浅谈MySQL并发控制:隔离级别、锁与MVCC

    推荐阅读: 恕我直言!收藏这个MySQL文档,你其余的MySQL学习资料都可以扔了 前言 如果数据库中的事务都是串行执行的,这种方式可以保障事务的执行不会出现异常和错误,但带来的问题是串行执行会带来性 ...

  5. mysql transaction用法,mysql的事务,隔离级别和锁用法实例分析

    本文实例讲述了mysql的事务,隔离级别和锁用法.分享给大家供大家参考,具体如下: 事务就是一组一起成功或一起失败的sql语句.事务还应该具备,原子性,一致性,隔离性和持久性. 一.事务的基本要素 ( ...

  6. MySQL深度剖析之事务隔离级别和锁机制(2021)

    一 事务隔离级别和锁机制 1.1 多个事务并发修改同一条数据或者对同一条数据并发读写存在哪些事务并发问题 1.1.1 脏读(未提交读) A事务读取了别的事务还未提交的更新,而B事务是有可能回滚的. 1 ...

  7. mysql 乐观锁 脏读_mysql 丢失更新1和2、脏读、不可重复读和幻读 事务隔离级别 悲观锁 乐观锁...

    事务是现代关系型数据库的核心之一.在多个事务并发操作数据库(多线程.网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题: ( 第一类丢失更新 A事务撤销时,把已经提交的B事务的更新数据覆 ...

  8. MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)

    MySQL事务原理分析(ACID特性.隔离级别.锁.MVCC.并发读异常.并发死锁以及如何避免死锁) 一.事务 目的 组成 特征 事务空间语句 二.ACID特性 原子性(A) 隔离性(I) 持久性(d ...

  9. MySQL隔离级别--未提交读,提交读,可重复读,序列化--详解(有示例)

    原文网址:MySQL隔离级别--未提交读,提交读,可重复读,序列化--详解(有示例)_IT利刃出鞘的博客-CSDN博客 简介          本文介绍MySQL的事务隔离级别的含义,并用示例说明各个 ...

最新文章

  1. 高薪程序员的5个工资档次
  2. 【数字信号处理】傅里叶变换性质 ( 傅里叶变换时移性质示例 )
  3. Leetcode 160. 相交链表 解题思路及C++实现
  4. 如何理解Minor/Major/Full GC
  5. phpmyadmin管理mysql_用phpMyAdmin管理MySQL数据库_MySQL
  6. weblogic hibernate HqlToken
  7. Malta中any函数
  8. 大数据技术在发展 挑战与机遇并存
  9. java从0单排之java就业培训教程复习与面试题回顾——03
  10. sterm机器人编程_STEAM智能编程机器人
  11. cfree5.0中文版
  12. QualDash: Adaptable Generation of Visualisation Dashboards for Healthcare Quality Improvement
  13. HDU-3987 Harry Potter and the Forbidden Forest(最大流)
  14. 常用的可用性工程方法
  15. 贝壳找房《2018城市居住报告》:新一线租房量持续攀升
  16. 学习漫画应该如何入门?其实掌握这5种漫画套路就可以啦
  17. html网页的主题标签是什么6,HTML标签及标签属性大全(网页制作必备知识)
  18. 无抵押贷款 幸福生活新选择
  19. java执行sql列名无效_Sql异常:列名无效
  20. ros3。3教程 入门到高级

热门文章

  1. centos6.0下ffmpeg的安装编译经历
  2. hdu As Easy As A+B
  3. JavaScript中的面向对象
  4. rsync的配置应用
  5. 第二十一课:材料磁性
  6. windows下编译lua源码
  7. 单机杀毒软件仅是企业信息安全的时尚毛衣
  8. 基于自然语言的软件工程和程序设计(下)
  9. 确保独立计算机上的EFS加密数据恢复
  10. 4测试命令_科普 | 最全的Filecoin测试网挖矿步骤解析