mysql中语句块当事务,MySQL事务与隔离级别
--查看隔离级别
select @@global.tx_isolation, @@tx_isolation;
--修改隔离级别
set [session | global] transaction isolation level [ read uncommitted | read committed | repeatable read | serializable]
--设置全局隔离级别
set global transaction isolation level read committed;
--设置当前会话隔离级别
set session transaction isolation level read committed;
--开启事务
begin;
start transaction;
--禁用自动提交,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务
--autocommit = 1 这种模式会在每条语句执行完毕后把它作出的修改立刻提交给数据库并使之永久化.
set autocommit = 0;
--读锁或者写锁在事务提交时候释放
SELECT * FROM test WHERE id = 1 LOCK IN SHARE MODE //读锁
SELECT * FROM test WHERE id = 1 for update //写锁
快照读:
select * from test where id = 1001;
1.读未提交:忽略
2.读已提交:不加锁
3.可重复读:不加锁
4.串行化:加读锁(范围如下)
4.1.数据存在且Mysql使用索引
(1)id为主键: 锁一条记录
(2)id为唯一索引:锁一条记录
(3)id为普通索引:gap key(左开右开) +record lock
(4)id无索引:gap key(所有gap锁) + record lock(所有记录)
4.2. 数据不存在且使用索引
(1)id为主键:gap锁(左开右开)
(2)id为唯一索引:gap锁(左开右开)
(3)id为普通索引:gap key(左开右开)
(4)id无索引:gap key(所有gap锁) + record lock(所有记录)
4.3. 不适用索引
gap key(所有gap锁) + record lock(所有记录)
当前读:
select * from test where id = 1 lock in share model(读锁)
select * from test where id = 1 for update(写锁)
insert test values(x,x,x,x)(写锁)
delete from test where id = 1(写锁)
update test set id = x where id = 1(写锁)
各种隔离级别的下的表现
1.读未提交:忽略
2.读已提交:加锁
2.1.数据存在且Mysql使用索引
(1)id为主键: 锁一条记录
(2)id为唯一索引: 锁一条记录
(3)id为普通索引: record lock
(4)id无索引: record lock(所有记录)(会迅速优化成对指定记录加锁)
2.2. 数据不存在且使用索引
(1)id为主键:无锁
(2)id为唯一索引:无锁
(3)id为普通索引:无锁
(4)id无索引:无锁
2.3. 不适用索引
结果集加锁
------------ 读已提交 只对查找出来的结果集加锁,不会加间隙锁,不保证可重复度---------
3.可重复读:加锁
3.1.数据存在且Mysql使用索引
(1)id为主键: 锁一条记录
(2)id为唯一索引:锁一条记录
(3)id为普通索引:gap key(左开右开) +record lock
(4)id无索引:gap key(所有gap锁) + record lock(所有记录) ----(整张表不能insert)----
3.2. 数据不存在且使用索引
(1)id为主键:gap锁(左开右开)
(2)id为唯一索引:gap锁(左开右开)
(3)id为普通索引:gap key(左开右开)
(4)id无索引:gap key(所有gap锁) + record lock(所有记录)----(整张表不能insert)----
3.3. 不适用索引
gap key(所有gap锁) + record lock(所有记录)----(整张表不能insert)----
-----当索引区分度不高或者强制类型转换等导致没有索引失效,给全部记录加锁------
4.串行化:加读锁(范围如下)
4.1.数据存在且Mysql使用索引
(1)id为主键: 锁一条记录
(2)id为唯一索引:锁一条记录
(3)id为普通索引:gap key(左开右开) +record lock
(4)id无索引:gap key(所有gap锁) + record lock(所有记录)
4.2. 数据不存在且使用索引
(1)id为主键:gap锁(左开右开)
(2)id为唯一索引:gap锁(左开右开)
(3)id为普通索引:gap key(左开右开)
(4)id无索引:gap key(所有gap锁) + record lock(所有记录)
4.3. 不适用索引
gap key(所有gap锁) + record lock(所有记录)
MySQL-InnoDB锁分析
可重复度隔离级别下,两个线程可以同时对不存在的数据加锁,且都能成功,都加锁后,任一个线程插入会等待,若另一个线程也插入,则会死锁
mysql中语句块当事务,MySQL事务与隔离级别相关推荐
- mysql中语句块当事务,Mysql 存储过程的学习笔记
技术要点 一个存储过程包括名字.参数列表,以及可以包括很多SQL语句的SQL语句集.下面为一个存储过程的定义过程: create procedure proc_name (in parameter i ...
- MySQL中基于XA实现的分布式事务
文章目录 一.前言 二.XA基础 2.1 XA基础知识 2.1.1 DTP是什么? 2.1.2 DTP的结构:AP TM RM(重点001) 2.1.3 DTP的重要概念 2.2 XA事务:基于两阶段 ...
- MySQL 中基于 XA 实现的分布式事务
五.MySQL 中基于 XA 实现的分布式事务 5.1 XA协议 首先我们来简要看下分布式事务处理的XA规范 可知XA规范中分布式事务有AP,RM,TM组成: 其中应用程序(Application P ...
- mysql隔离级别 简书_数据库事务和四种隔离级别
什么是事务 事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit),它通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起 ...
- mysql事务传播属性_Spring事务传播属性和隔离级别详细介绍
1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 Support a current transaction, create a new one if none ...
- MySQL事务的4种隔离级别
文章目录 1 简介 2 什么是数据库事务? 2.1 事务的四大特性(ACID) 3 并发事务会导致的问题 3.1 本文会使用到的 SQL 语句: 3.1.1 示例表结构 3.1.2 查询事务的默认隔离 ...
- oracle事务重要属性,Oracle中的事务(2)--属性和隔离级别
事务的属性 1.只读属性(read only) 只读事务,只执行查询操作,而不允许执行DML(增.删.改)操作,使用只读事务,可以让用户只取到某个时间点的数据. 假如有一个机票代售点,有一个管理员想在 ...
- mysql中or详细使用方式(Mysql之and和or混合使用) MES
mysql中or详细使用方式(Mysql之and和or混合使用) 在mysql中,经常会遇到这样的情况,在写条件语句where时,可能会同时有多个条件的"或"或者"与&q ...
- mysql doen s exist_Mysql实例Mysql中大小写敏感问题导致的MySql Error 1146 Tabel doen’t exist错误...
<Mysql实例Mysql中大小写敏感问题导致的MySql Error 1146 Tabel doen't exist错误>要点: 本文介绍了Mysql实例Mysql中大小写敏感问题导致的 ...
最新文章
- android5去wifi感叹号,[收集]原生安卓5及以后版本,WiFi标志上警示标志的去除
- 分布式文件系统Hadoop
- 局域网中架设Win 2003终端服务器
- leetcode-买卖股票的最佳时机④*
- python列表可以删除和修改吗_Python列表常见操作详解(获取,增加,删除,修改,排序等)...
- 【音频处理】离散傅里叶变换
- [ARM] [linux master] 调试技术002 在linux下面使用mtrace来检查一般程序的内存溢出
- php在线预览文档,php如何实现文档在线预览
- Android audio切换设备通道流程(二十八)
- python输出特征相关矩阵_两个特征矩阵的有效成对相关
- C# ToString
- JavaScript 弹窗事件
- VMS-B230/260如何登录存储控制器
- pixhawk启动脚本分析
- 甘超波:NLP五步觉察法
- oracle查询排序id,Oracle查询数据怎么按照甲乙丙丁排序?谢谢
- mysql防止商品超卖_避免商品超卖的4种方案
- 全球与中国远程监控(M&C)系统市场深度研究分析报告
- 2021 ICPC 银川打铜记
- Oracle日期型函数详解
热门文章
- Python使用字典get()方法TypeError: get() takes no keyword arguments
- 排序算法(5)----堆排序
- kubernetes 磁盘、PV、PVC
- [VMM 2008虚拟化之初体验-1] 准备环境
- poj 2229 Sumsets(类似于n的m划分)
- ASP.NET MVC多语言 仿微软网站效果(转)
- SpringCloud04 服务配置中心、消息总线、远程配置动态刷新
- spring mvc 前后端数据交互笔记(解决415,400问题)
- zoj3494BCD Code(ac自动机+数位dp)
- codeblocks 调试