MYSQL–>事务

  • 事务是一组操作的集合,它是一个不可分割的工作单位。
  • 事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败

开启事务—->提交事务

如果中间出现了异常,就回滚事务

回滚事务指的是将修改的数据恢复

注意:MYSQL中默认事务自动提交,即执行DML语句的时候MYSQL会立即隐式的提交事务.

以转账为例

假定有这样一个账单

账户 余额 张三 2000 李四 2000

现进行以下操作

对这三条指令在同一时间执行那么表会变成

账户 余额 张三 1000 李四 3000

假定2–3中存在SQL语句A,且A中SQL语句必然不能执行成功

这张表就会变成

账户 余额 张三 1000 李四 2000

那么将1,2,A,3的代码在同一时间执行,就会出现1,2执行成功A,3执行不超过

这时候我们回滚事务回复即可。

在MYSQL中每一条DML语句都是一个单独的事务,并且默认自动提交。

事务的执行语法

查看事务提交方式

Select @@autocommit;

如果是1代表手动提交,0代码自动提交。在MYSQL中@@代表系统变量,@代表用户自定义变量。

设置事务的提交方式

Set @@autocommit=0或者1;(这个是将整个控制台提交方式的修改)
begin;  开启事务
Start transcation; 开启事务

提交事务

commit;

回滚事务

rollback;

一般事务用法:

begin或start transcation
SQL语句
commit;

出现错误
回滚事务
roolback;

原子型(Atomicity)

事务是不可分割的最小操作单位,要么全部成功要么全部失败

一致性(Consistency)

事务完成时,必须使所有数据保持一致的状态

隔离性(Isolation)

数据库提供的 隔离机制,保证事务不受外部并发操作的影响的独立环境运行

持久性(Durability)

事务一旦提交或回滚,他对数据库中的数据影响是永久的

A事务和B事务同时操作同一张表引发的问题叫并发事务问题

就多个操作端,同时操作一张表产生的问题。

事务A读取到了事务B未提交的数据

代码过程

事务A的客户端(数字代表执行顺序)

1. begin;  ->客户端A开启事务
3. select * from account where id=1;   ->事务A查询id=1的内容
5. select * from account where id=1;   ->事务A再次查询id=1的内容
6.读取到了客户端B未提交的数据

事务B的客户端

2. begin;  ->客户端B开启事务
4. update account set mone=money-1000 where id=1;  ->事务B更新id=1的数据

A事务读取到了B事务 未提交的数据就叫 脏读

不可重复读

在一个事务中,查询俩次前后查询数据不一致的叫 不可重复读

代码过程

事务A的客户端(数字代表执行顺序)

1. begin;       ->客户端A开启事务
3. select * from account where id=1;  ->客户端A第一次查询id=1的记录
6. select * from account where id=1;  ->客户端A第二次查询id=1的记录
7. 前后查询不一致!

事务B的客户端

2. begin;       ->客户端B开启事务
4. update account set money=money+1000 where id=1; ->客户端B更新id=1的记录
5. commit;  ->客户端B提交数据

事务A按条件查询一个记录的时候该记录不存在

但是按照这个条件插入数据的时候会返回已经存在该数据。这种叫幻读

代码过程

客户端A(数字代表执行顺序)

1. begin;   ->客户端A开启事务
3. select * from account where id=3; ->假定不存在id=3的数据,事务A第一次查询id=3的数据
6. insert into account(id,name,money) values(3,'王五',3000); ->事务A插入id=3的数据,结果反馈说已经存在id=3的数据
7. select * from account where id=3; ->事务A继续查询id=3的数据,反馈不存在id=3的数据

客户端B

2. begin;  ->客户端B开启事务
4. insert into account(id,name,money) values(3,'王五',3000); ->事务B插入id=3的数据
5. commit;  ->事务B提交数据
  • √代表会出现
  • ×代表不会出现

隔离级别 脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable Read(默认) × × √ Serializable × × ×

从read uncommitted—>serializable 隔离级别依次提高,性能依次下降。

查询当前事务的隔离级别

select @@transaction_isolation;

设置事务的隔离级别

set [session/global] transaction isolation level [级别];

session代表对当前窗口有效,global代表对全部窗口有效

Original: https://www.cnblogs.com/wdadwa/p/MYSQL_Learning_05.html
Author: wdadwa
Title: MYSQL–>事务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611876/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 一个反直觉的sql

    引子 在《容易引起雪崩的两个处理》里,我提到一个慢查询的问题。本文先从整洁架构的角度讲讲慢查询sql完成的功能以及设计,再介绍对sql进行的实施测试现象以及思考。 设计讲解 眼看着…

    数据库 2023年5月24日
    0133
  • 百万数据 mysql count(*)优化

    Original: https://www.cnblogs.com/sunshine-blast/p/16272978.htmlAuthor: 魁哥2020Title: 百万数据 …

    数据库 2023年5月24日
    0111
  • Java百度地图经纬度纠偏

    在国内使用电子地图获取到的经纬度都不是真实的经纬度,而是经过一定的算法在真实的经纬度上添加了一个偏移量,且不同的地图有不同的算法。现在告诉大家在java中怎样对百度地图进行纠偏,主…

    数据库 2023年6月9日
    0104
  • javaScript知识大全(基础)!!

    定义方法:即把函数放在对象里面,对象只有属性和方法 var a={ name:"111", birth:2000, age:function (){ var n…

    数据库 2023年6月16日
    0103
  • 史上最全Mysql规范

    1 整体规约 1)【强制】数据库所有对象必须要有注释,包括:表、字段、索引等,并且要保持最新; 1)【强制】默认使用utf8字符集,无乱码风险,除一些需要存储特殊符号的字段,可以采…

    数据库 2023年5月24日
    0114
  • 一文了解Cookie

    Cookie 什么是 Cookie? 先要了解HTTP是 无状态的Web服务器,什么是无状态呢?一次对话完成后下一次对话完全不知道上一次对话发生了什么。如果在Web服务器中只是用来…

    数据库 2023年6月11日
    0137
  • gh-ost使用问题记录

    因为 pt-osc 对数据库性能影响较大,且容易造成死锁问题,目前我们在线更改表结构都使用 gh-ost 工具进行修改,这里记录一下使用 gh-ost 过程中的问题,以作记录;首先…

    数据库 2023年6月9日
    0104
  • 计算机组成原理——组成篇

    计算机的总线 1 、总线的作用及概述 解决设备间通讯问题。 总线是为了解决不同设备之间的通信问题。 总线可以连接CPU和IO设备。 2 、总线分类:片内总线、系统总线 片内总线:连…

    数据库 2023年6月16日
    086
  • kafka详解(一)–kafka是什么及怎么用

    kafka是什么 在回答这个问题之前,我们需要先了解另一个东西–event streaming。 什么是event streaming 我觉得, event strea…

    数据库 2023年6月6日
    0109
  • 简单!代码原来是这样被CPU跑起来的

    CPU对我们来说既熟悉又陌生,熟悉的是我们知道代码是被CPU执行的,当我们的线上服务出现问题时可能首先会查看CPU负载情况。陌生的是我们并不知道CPU是如何执行代码的,它对我们的代…

    数据库 2023年6月6日
    0106
  • 02-MySQL关键字、Select语句执行顺序

    SQL关键字 1、分页 MySQL的分页关键词是 limit SELECT * FROM student LIMIT 2,6:查询学生表中的数据,从第三条开始,显示6条数据 2、分…

    数据库 2023年6月16日
    0127
  • MySQL连接的建立与使用

    在 MYSQL的启动过程中,可以看到在 mysqld_main() 函数的最后调用了 mysqld_socket_acceptor->connection_event_loo…

    数据库 2023年6月9日
    0109
  • flowable 从zip压缩包 部署流程定义

    /**部署流程定义(从zip压缩包) * @param name //部署名称 * @param zippath //zip文件路径 * @return 部署ID * @from …

    数据库 2023年6月6日
    0116
  • 近年来我带队开发出的一坨屎山

    有人说: 烂代码跟一坨屎一样,很多时候就是和一坨屎共处千万别深挖,说不定把哪里挖塌了把你埋了,扔一坨代码到屎山上,达到自己目的,能跑就行了,你还要搞清楚山上的屎哪一坨是谁拉的,拉的…

    数据库 2023年6月9日
    0130
  • Linux指令_入门基础

    2.pwd指令 : 用法:#pwd (print working directory ,打印当前工作目录) 3.cd指令 : 命令:# cd (change directory,改…

    数据库 2023年6月11日
    0129
  • 在ESXI6.7中安装OpenWrt

    在ESXI6.7中安装OpenWrt 21.02.2 一、前置准备 安装好的esxi6.7 下载openwrt镜像,如:openwrt-21.02.2-x86-64-generic…

    数据库 2023年6月9日
    0151
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球