事务及mysql中的隔离级别
事务,一个或一组sql语句组成的执行单元,是最小的执行单元,要么全执行,要么全不执行。如果单元中某条sql语句执行失败,整个单元将会回滚,所有受影响的数据返回到事务开始前的状态。
事务具有ACID四个属性
A atomicity 原子性 ,原子性是指一个事务是不可再分割的单位,事务中的操作要么都发生,要么都不发生。
C consistency 一致性 事务必须使数据从一个一致性状态,切换到另外一个一致性状态。比方在一个转账过程中发生的金钱转换,转账前后,钱的总额是不变的,转账前A有x元,B有y元,转账完成之后A有z元,B有w元,则 x + y 是等于 z+ w的。
I isolation 隔离性 指一个事务的执行不能被其他的事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不得相互干扰。
D durability 持久性 一个事务一旦提交之后,对数据库中数据的改变是永久性的,接下来其他操作和数据库故障不应该对其有任何影响。
mysql中,
insert,update,delete语句都是隐式事务,想要手动设置一个事务,则需要将autocommit设置为 0,等整个事务语句都执行完毕之后,再写commit提交 或rollback回滚。
比方可以这么写一个事务:
set autocommit = 0;[start transaction;]要执行的sql语句;[savepoint 回滚点名字]...#一般就是增删改查语句...commit | rollback [ to 回滚点名字]; # 设置回滚点前的语句都会被提交
当不同事务访问相同数据时,会发生一下几个问题,
脏读,幻读,不可重复读
脏读 是指一个事务读取了另一个事务已经更改之后的数据,但是过了一会儿该事务又将事务回滚的情况。
不可重复读 是指一个事务读取的一个数据前后不一致的情况。多次重复读取数据的结果不一致。
幻读 一个事务读取数据的过程中有另一个事务执行了插入语句,导致当前事务读取数据前后数量不一致。比方一条更新全表的语句,开始执行前有n行数据,如果执行过程中,有另一事务插入了若干行数据,则执行完毕更新语句之后,受影响的行数前后会不一致。
mysql可以通过设置隔离级别可以避免以上几种现象
mysql的默认事务隔离级别为repeatable read,此种级别可以避免脏读和不可重复读的产生。次外还有以下几种
| 隔离级别/会出现的问题 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| read uncommitted | |||
| read committed | × | ||
| repeatable read | × | × | |
| serializable | × | × | × |
查看当前的隔离级别:select @@tx_isolatioin;
设置当前连接的隔离级别: set transaction isolation level 隔离级别名字
事务及mysql中的隔离级别的更多相关文章
- [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 数据库事务中的隔离级别和锁+spring Transactional注解
数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题.ACID首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(At ...
- [转]数据库事务中的隔离级别和锁+spring Transactional注解
数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题.ACID首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(At ...
- 一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1 .mysql索引结构,各自的优劣 2 .索引的设计原则 3 .mysql锁的类型有哪些 4 .mysql执行计划怎么看 ...
- spring 中常用的两种事务配置方式以及事务的传播性、隔离级别
一.注解式事务 1.注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo. 2.事务配置实例 (1).spring+mybatis 事务配置 &l ...
- 浅析MySQL InnoDB的隔离级别
MySQL InnoDB存储引擎中事务的隔离级别有哪些?对应隔离级别的实现机制是什么? 本文就将对上面这两个问题进行解答,分析事务的隔离级别以及相关锁机制. 隔离性简介 隔离性主要是指数据库系统提供一 ...
- Innodb 中 RR 隔离级别能否防止幻读?
问题引出 我之前的一篇博客 数据库并发不一致分析 有提到过事务隔离级别以及相应加锁方式.能够解决的并发问题. 标准情况下,在 RR(Repeatable Read) 隔离级别下能解决不可重复读(当行修 ...
- 数据库的特性与隔离级别和spring事务的传播机制和隔离级别
首先数据库的特性就是 ACID: Atomicity 原子性:所有事务是一个整体,要么全部成功,要么失败 Consistency 一致性:在事务开始和结束前,要保持一致性状态 Isolation 隔离 ...
- springboot事务的传播行为和隔离级别
springboot事务的传播行为和隔离级别 在springboot中事务的传播行为和隔离级别都是在TransactionDefinition这个接口中定义的 传播行为定义了7种,分别用0-6来表示 ...
- MySQL - 数据库的隔离级别
MySQL - 数据库的隔离级别 隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read) 未提交读(Read uncommitte ...
随机推荐
- Redis 中 scan 命令踩坑
原本以为自己对redis命令还蛮熟悉的,各种数据模型各种基于redis的骚操作.但是最近在使用redis的scan的命令式却踩了一个坑,顿时发觉自己原来对redis的游标理解的很有限.所以记录下这个踩 ...
- Qt编写地图综合应用56-实时动态轨迹
一.前言 实时动态轨迹经历过很多个版本的迭代,此功能最初是一个客户定制的,主要是需要在地图上动态显示GPS的运动轨迹,有个应用场景就是一个带有监控的车子,实时在运动中,后台可以接收到经纬度信息,需要绘 ...
- 阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践
本文由阿里闲鱼技术团队有攸分享,原题"向消息延迟说bybye:闲鱼消息及时到达方案",有修订和改动,感谢作者的分享. 1.引言 IM消息作为闲鱼用户重要的交易咨询工具,核心目标有两 ...
- 《深入理解Mybatis原理》MyBatis动态SQL原理
引入 我们在使用mybatis的时候,会在xml中编写sql语句.比如这段动态sql代码: <update id="update" parameterType="o ...
- CDS标准视图:催款冻结 I_DunningBlockingReasonCode
视图名称:催款冻结 I_DunningBlockingReasonCode 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Dunning Blocking R ...
- WPF 动态加载嵌入主程序的DLL
WPF 动态加载嵌入主程序的DLL,好处是节省文件数量,坏处是启动影响加载速度. 首先将DLL添加进项目,选择添加现有项,设置生成操作为"嵌入资源". 代码: public App ...
- 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法
出现题目的异常,多是引用第三方控件引起的. 在NEW时,需要初始化该对象. AxESACTIVEXLib.AxESActiveX ax = new AxESACTIVEXLib.AxESActiveX ...
- get Toutiao.com news list
.get cookie with your browser then can do using System; using System.Collections.Generic; using Syst ...
- 分布式数据库NoSQL简介
NoSQL第一部分 一.什么是NoSQL? 问题:12306在开始诞生的前几年,每到重大节假日,经常"瘫痪",直接原因就是集中超负荷的访问量.技术原因是它在此期间所采用的国际著 ...
- runoob-NumPy(python)
https://www.runoob.com/numpy/numpy-tutorial.html NumPy 教程 NumPy(Numerical Python) 是 Python 语言的一个扩展程序 ...