文章目录

  • 事务简介
  • 事务操作
  • 事务特征(ACID)
  • 事务安全隐患

关于MySQL的基础可以看这篇博客: 值得收藏的MySQL基础总结

事务简介

事务(Transaction)

  • 事务是一个最小的不可再分的工作单元。通常一个事务对应一个完整的业务(例如银行账户转账业务)。
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。

事务操作

开启事务
start transaction;
提交事务,即将数据写入到磁盘中
commit
回滚事务,回到最初的状态
rollback
查看事务是否开启自动提交
show variables like 'autocommit';

可以看出在MySQL中事务默认是自动提交的,为了演示事务,首先我们需要关闭自动提交。
关闭事务自动提交
set autocommit=off;

下面通过一个银行转账的例子进行演示事务,a账户要给b账户转账100元

下面这两条命令必须同时成功或者同时失败,这就是一个事务

update bank set money=700 where id=1;
update bank set money=600 where id=2;

所以在执行这两句之前需要先开启事务
start transaction;
然后执行事务

update bank set money=700 where id=1;
update bank set money=600 where id=2;

最后提交事务
commit;
这样一波操作成功之后,数据才能被持久化到磁盘,如果仅仅第一条执行成功了,数据只是在内存中保存,而没有持久化到数据库,如果第二条也成功了,那么可以通过commit提交事务保存到磁盘中,如果第二条语句失败了,可以通过rollback回滚到最初的状态,要达到这种目的就需要事务。

事务特征(ACID)

  • 原子性(Atomicity):事务是最小的单位,不可再分
  • 一致性(Consistency):事务要求所有的操作,必须保证同时成功或同时失败
  • 隔离性(Isolation):事务与事务之间互相隔离
  • 持久性(Durability):事务执行成功会,会持久到磁盘中

事务安全隐患

事务和事务之间具有隔离性,隔离性分为四个级别
读未提交(read uncommitted),事务B读取了事务A未提交的数据,也叫做:读脏数据
读已提交(read committed),事务B读取了事务A提交的数据(解决了脏读,这是Oracle的默认隔离级别),也就是说,事务A提交了数据,然后事务B可以读取,提交一次,只能读取一次,这也叫做:不可重复读
可重复读(repeatable read),事务A提交的数据,事务B可以重复读取(解决了脏读和不可重复读,这是MySQL的默认隔离级别),但是,可能出现两次读取的结果不同,这就引起了:幻读
可串行化(serializable),事务A在处理数据的时候,事务B只能排队(解决了脏读、不可重复读和幻读),即是串行化,不能并发,效率很低

查看事务的隔离界别
select @@transaction_isolation;,可以看出MySQL默认的是可重复读。

设置隔离级别为读未提交
set session transaction isolation level read uncommitted;
设置隔离界别为读已提交
set session transaction isolation level read committed;
设置隔离级别为可重复读
set session transaction isolation level repeatable read;
设置隔离界别为可串行化
set session transaction isolation level serializable;

MySQL事务基础,看这篇就够了!相关推荐

  1. ole db 访问接口 sqlncli 无法启动分布式事务_分布式事务,看这篇就够了

    0. 前言 1. 单数据源事务 & 多数据源事务 2. 常见分布式事务解决方案 2.1. 分布式事务模型 2.2. 二将军问题和幂等性 2.3. 两阶段提交(2PC) & 三阶段提交( ...

  2. iOS相关基础看这篇就够了

    响应链 知识点:Responder相关的子类.Runloop 常见提问:在屏幕上点击一个按钮发生了什么? 响应链上的相关继承关系,你为什么可以响应? 继承至UIResponder的才可以响应 NSOb ...

  3. Vue全家桶(Vue基础看这篇就够了)

    目录 第一章:vue核心 1.1.Vue 简介 1.1.1 官网 1.1.2 Vue是什么? 1.1.3 Vue的特点 1.1.4 Vue周边库 1.2 初识Vue 1.3 模板语法 1.4 数据绑定 ...

  4. 一下子搞懂JDBC,看这篇就够了--以MySQL为例。

    一下子搞懂JDBC,看这篇就够了–以MySQL为例. 文章目录 一下子搞懂JDBC,看这篇就够了--以MySQL为例. 一.什么是JDBC? 二.JDBC的使用步骤 三.jdbc进阶--上述各个类或接 ...

  5. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

  6. 茶的分类计算机基础知识,【收藏】六大茶类的本质区别,看这篇就够了!(附茶叶分类图)...

    原标题:[收藏]六大茶类的本质区别,看这篇就够了!(附茶叶分类图) 其实六大茶类的划分标准和本质区别在于,制作工艺和茶叶中茶多酚的氧化程度.接下来就按茶叶发酵程度由低到高排序,简要介绍各类茶之间的区别 ...

  7. Docker入门实战看这篇就够了(最新详细以及踩过的坑)

    Docker入门实战看这篇就够了 前言 初识 是什么 容器与虚拟机 能干什么 去哪玩 安装 先决条件 查看自己的内核 安装所需的软件包(支持devicemapper存储类型) 设置镜像的仓库 设置yu ...

  8. [个人向]超快速了解微信小程序:看这篇就够了!(注册、语言、框架、配额等简要说明)

    [个人向]超快速了解微信小程序看这篇就够了+相关简要说明 本文精炼微信小程序开发文档相关内容,旨在对初次接触并准备开发小程序的童鞋(比如自己)提供一个快速了解攻略.其中包括注册相关.语言.框架模式.相 ...

  9. uiautomation遍历windows所有窗口_万字长文!滑动窗口看这篇就够了!

    大家好,我是小浩.今天是小浩算法 "365刷题计划" 滑动窗口系列 - 整合篇.之前给大家讲解过一些滑动窗口的题目,但未作系统整理. 所以我就出了这个整合合集,整合工作中除了保留原 ...

  10. .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了

    写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...

最新文章

  1. matlab 职坐标,机器学习入门之机器学习实战ByMatlab(四)二分K-means算法
  2. AI人必看!89页全网最全清华知识图谱报告
  3. 第5章-无人机UAV模型分析
  4. Python selenium环境搭建
  5. web系统 手机app 能访问吗?_苹果手机能下载什么好用的桌面便签?有什么好的便签app推荐吗...
  6. 任何傅里叶级数展开和卷积可以参考一下页面
  7. 什么是TTL电平、CMOS电平、RS232电平
  8. 梯度下降法、牛顿法和拟牛顿法——机器学习面试
  9. python登录验证_Python第一天-----简单登录验证
  10. 关于SQL语言的优化(Oracle)
  11. python的安全插件
  12. Atitit js中的依赖注入di ioc的实现
  13. java记事本教程_使用记事本开发java程序的步骤
  14. 阿里面试整个流程(已OC)
  15. 嵌入式文件系统固件img制作与解包
  16. [每日一氵] TensorRT中 GA和EA的不同
  17. 学phyton第二天
  18. 电脑手机css自适应,怎么把一个pc页面自适应手机屏幕
  19. Vscode的beautify插件使用
  20. Parallels Desktop 安装Win 10提示“安全启动功能防止操作系统启动”该怎么解决?

热门文章

  1. 关于虚拟化 云计算
  2. CentOS开启samba服(附smb.conf手册)
  3. 卸载 Visual Studio 2005
  4. 什么是命名空间?php命名空间的基本应用分享
  5. JavaScript DOM编程艺术第一章:JavaScript简史
  6. 对标Postman的ApiPost创始人:用户,是ApiPost唯一的信仰
  7. 软件测试基础 - 系统测试
  8. Eclipse编写第一个Java程序
  9. jenkins pipeline之如何创建一个流水线
  10. CSS 布局 - Overflow