mysql 隔离级别和锁相关
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 隔离级别和锁相关相关推荐
- Mysql隔离级别、锁及死锁
一.MySQL常用存储引擎 MyISAM:5.1及之前默认的存储引擎,不支持事务.外键:只有索引缓存(index buffer):提供表级锁,只有select语句时不锁,其他情况上锁:适于select ...
- mysql隔离级别与锁,接口并发响应速度的关系(2)
innoDB默认隔离级别 mysql> SELECT @@tx_isolation; +-----------------+ | @@tx_isolation | +-------------- ...
- mysql隔离级别与锁的关系
- 事物的级别_浅谈MySQL并发控制:隔离级别、锁与MVCC
推荐阅读: 恕我直言!收藏这个MySQL文档,你其余的MySQL学习资料都可以扔了 前言 如果数据库中的事务都是串行执行的,这种方式可以保障事务的执行不会出现异常和错误,但带来的问题是串行执行会带来性 ...
- mysql transaction用法,mysql的事务,隔离级别和锁用法实例分析
本文实例讲述了mysql的事务,隔离级别和锁用法.分享给大家供大家参考,具体如下: 事务就是一组一起成功或一起失败的sql语句.事务还应该具备,原子性,一致性,隔离性和持久性. 一.事务的基本要素 ( ...
- MySQL深度剖析之事务隔离级别和锁机制(2021)
一 事务隔离级别和锁机制 1.1 多个事务并发修改同一条数据或者对同一条数据并发读写存在哪些事务并发问题 1.1.1 脏读(未提交读) A事务读取了别的事务还未提交的更新,而B事务是有可能回滚的. 1 ...
- mysql 乐观锁 脏读_mysql 丢失更新1和2、脏读、不可重复读和幻读 事务隔离级别 悲观锁 乐观锁...
事务是现代关系型数据库的核心之一.在多个事务并发操作数据库(多线程.网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题: ( 第一类丢失更新 A事务撤销时,把已经提交的B事务的更新数据覆 ...
- MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
MySQL事务原理分析(ACID特性.隔离级别.锁.MVCC.并发读异常.并发死锁以及如何避免死锁) 一.事务 目的 组成 特征 事务空间语句 二.ACID特性 原子性(A) 隔离性(I) 持久性(d ...
- MySQL隔离级别--未提交读,提交读,可重复读,序列化--详解(有示例)
原文网址:MySQL隔离级别--未提交读,提交读,可重复读,序列化--详解(有示例)_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL的事务隔离级别的含义,并用示例说明各个 ...
最新文章
- 高薪程序员的5个工资档次
- 【数字信号处理】傅里叶变换性质 ( 傅里叶变换时移性质示例 )
- Leetcode 160. 相交链表 解题思路及C++实现
- 如何理解Minor/Major/Full GC
- phpmyadmin管理mysql_用phpMyAdmin管理MySQL数据库_MySQL
- weblogic hibernate HqlToken
- Malta中any函数
- 大数据技术在发展 挑战与机遇并存
- java从0单排之java就业培训教程复习与面试题回顾——03
- sterm机器人编程_STEAM智能编程机器人
- cfree5.0中文版
- QualDash: Adaptable Generation of Visualisation Dashboards for Healthcare Quality Improvement
- HDU-3987 Harry Potter and the Forbidden Forest(最大流)
- 常用的可用性工程方法
- 贝壳找房《2018城市居住报告》:新一线租房量持续攀升
- 学习漫画应该如何入门?其实掌握这5种漫画套路就可以啦
- html网页的主题标签是什么6,HTML标签及标签属性大全(网页制作必备知识)
- 无抵押贷款 幸福生活新选择
- java执行sql列名无效_Sql异常:列名无效
- ros3。3教程 入门到高级