事务,一个或一组sql语句组成的执行单元,是最小的执行单元,要么全执行,要么全不执行。如果单元中某条sql语句执行失败,整个单元将会回滚,所有受影响的数据返回到事务开始前的状态。

事务具有ACID四个属性

A atomicity 原子性 ,原子性是指一个事务是不可再分割的单位,事务中的操作要么都发生,要么都不发生。

C consistency 一致性 事务必须使数据从一个一致性状态,切换到另外一个一致性状态。比方在一个转账过程中发生的金钱转换,转账前后,钱的总额是不变的,转账前A有x元,B有y元,转账完成之后A有z元,B有w元,则 x + y 是等于 z+ w的。

I isolation 隔离性 指一个事务的执行不能被其他的事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不得相互干扰。

D durability 持久性 一个事务一旦提交之后,对数据库中数据的改变是永久性的,接下来其他操作和数据库故障不应该对其有任何影响。

mysql中,insertupdatedelete 语句都是隐式事务,想要手动设置一个事务,则需要将autocommit 设置为 0,等整个事务语句都执行完毕之后,再写 commit 提交 或rollback回滚。

比方可以这么写一个事务:

  1. set autocommit = 0;
  2. [start transaction;]
  3. 要执行的sql语句;
  4. [savepoint 回滚点名字]
  5. ...#一般就是增删改查语句
  6. ...
  7. commit | rollback [ to 回滚点名字]; # 设置回滚点前的语句都会被提交

当不同事务访问相同数据时,会发生一下几个问题,脏读,幻读,不可重复读

脏读 是指一个事务读取了另一个事务已经更改之后的数据,但是过了一会儿该事务又将事务回滚的情况。

不可重复读 是指一个事务读取的一个数据前后不一致的情况。多次重复读取数据的结果不一致。

幻读 一个事务读取数据的过程中有另一个事务执行了插入语句,导致当前事务读取数据前后数量不一致。比方一条更新全表的语句,开始执行前有n行数据,如果执行过程中,有另一事务插入了若干行数据,则执行完毕更新语句之后,受影响的行数前后会不一致。

mysql可以通过设置隔离级别可以避免以上几种现象

mysql的默认事务隔离级别为repeatable read,此种级别可以避免脏读和不可重复读的产生。次外还有以下几种

隔离级别/会出现的问题 脏读 不可重复读 幻读
read uncommitted
read committed ×
repeatable read × ×
serializable × × ×

查看当前的隔离级别:select @@tx_isolatioin;
设置当前连接的隔离级别: set transaction isolation level 隔离级别名字

事务及mysql中的隔离级别的更多相关文章

  1. [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. 数据库事务中的隔离级别和锁+spring Transactional注解

    数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题.ACID首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(At ...

  3. [转]数据库事务中的隔离级别和锁+spring Transactional注解

    数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题.ACID首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(At ...

  4. 一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1 .mysql索引结构,各自的优劣 2 .索引的设计原则 3 .mysql锁的类型有哪些 4 .mysql执行计划怎么看 ...

  5. spring 中常用的两种事务配置方式以及事务的传播性、隔离级别

    一.注解式事务 1.注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo. 2.事务配置实例 (1).spring+mybatis 事务配置 &l ...

  6. 浅析MySQL InnoDB的隔离级别

    MySQL InnoDB存储引擎中事务的隔离级别有哪些?对应隔离级别的实现机制是什么? 本文就将对上面这两个问题进行解答,分析事务的隔离级别以及相关锁机制. 隔离性简介 隔离性主要是指数据库系统提供一 ...

  7. Innodb 中 RR 隔离级别能否防止幻读?

    问题引出 我之前的一篇博客 数据库并发不一致分析 有提到过事务隔离级别以及相应加锁方式.能够解决的并发问题. 标准情况下,在 RR(Repeatable Read) 隔离级别下能解决不可重复读(当行修 ...

  8. 数据库的特性与隔离级别和spring事务的传播机制和隔离级别

    首先数据库的特性就是 ACID: Atomicity 原子性:所有事务是一个整体,要么全部成功,要么失败 Consistency 一致性:在事务开始和结束前,要保持一致性状态 Isolation 隔离 ...

  9. springboot事务的传播行为和隔离级别

    springboot事务的传播行为和隔离级别 在springboot中事务的传播行为和隔离级别都是在TransactionDefinition这个接口中定义的 传播行为定义了7种,分别用0-6来表示 ...

  10. MySQL - 数据库的隔离级别

    MySQL - 数据库的隔离级别 隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read) 未提交读(Read uncommitte ...

随机推荐

  1. 一场因OpenJDK引发的血案 之JavaFx

    https://zhuanlan.zhihu.com/p/103765203 案发现场 最近做了个项目,本地调试通过了,可在服务器上部署时却编译失败,报错如下 编译失败的原因是缺少javafx.uti ...

  2. Qt项目架构经验总结

    (一)通用规则 除了极小的微型demo级别项目外,其余项目建议用pri分门别类不同文件夹存放代码文件,方便统一管理和查找. 同类型功能的类建议统一放在一起,如果该目录下代码文件数量过多,也建议拆分多个 ...

  3. Qt音视频开发5-vlc事件订阅

    一.前言 事件订阅可以拿到文件长度.播放进度.播放状态改变等信息,vlc的事件订阅机制封装的比较友好,只需要先创建一个事件管理器,然后逐个订阅自己感兴趣的需要的事件,不感兴趣的可以不要订阅,只有订阅了 ...

  4. 将maven项目打包上传到私服

    1. 配置私服账户密码 在maven 的setting.xml 中配置用户名和密码: <servers> <server> <username>deployment ...

  5. Ant入门简单实例

    一.构建ant环境 要使用ant首先要构建一个ant环境,步骤很简单: 1) 安装jdk,设置JAVA_HOME ,PATH ,CLASS_PATH(这些应该是看这篇文章的人应该知道的) 2) 下载a ...

  6. 即时通讯技术文集(第19期):IM架构设计基础知识合集 [共13篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第19 期. [-1-] 微信后台基于时间序的新一代海量数据存储架构的设计实践 [链接] htt ...

  7. LRU的map+双链表实现(Go描述)

    面云账户时候问了LRU,具体实现的方式是map+双链表.Set和Get的时间复杂度都是O(1).完整写一遍复习一下, 仅作记录 /** * @Author: lzw5399 * @Date: 2021 ...

  8. 在MBP上运行推理LLaMA-7B&13B模型

    在MBP上运行推理LLaMA-7B模型 build this repo # build this repo git clone https://github.com/ggerganov/llama.c ...

  9. DVWA靶场XSS漏洞通关教程及源码审计

    XSS漏洞 XSS(跨站脚本攻击,Cross-Site Scripting)是一种安全漏洞,通常发生在Web应用程序中.XSS漏洞允许攻击者把恶意脚本注入到内容中, 这会在其他用户的浏览器中执行.这种 ...

  10. 从找朋友到找变位词:一道趣味字符串问题的深入解析|LeetCode 438 找到字符串中所有字母异位词

    LeetCode 438 找到字符串中所有字母异位词 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 还记得小时候玩的"找朋友&quo ...