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)

大家都在看

  • Springboot 注解失效问题 @Async, @Transactional, @Subsribe

    问题描述:在一个Service的某个方法上使用了guava eventbus @subscribe注解,最开始发现没有收到消息,debug发现是该service的该方法没有注册到e…

    数据库 2023年6月11日
    078
  • 学会Linux,看完这篇就行了!

    转载请注明出处❤️ 作者:测试蔡坨坨 原文链接:caituotuo.top/797ab07d.html 你好,我是测试蔡坨坨。 对于测试同学来说,Linux基本属于必学必会内容,招…

    数据库 2023年6月11日
    077
  • 线程池使用InheritableThreadLocal出现数据脏乱分析和解决方案

    背景 在测试环境上遇到一个诡异的问题,某些业务场景需要记录操作日志,有段时间发现记录的数据会被覆盖,例如当前用户的操作记录会被其他用户覆盖;这个现象是每次重启服务后一小段时间内就正…

    数据库 2023年6月6日
    0103
  • MySQL5 单点安装

    Original: https://www.cnblogs.com/cheng9999/p/16501129.htmlAuthor: cheng_blogTitle: MySQL5…

    数据库 2023年6月16日
    080
  • 分库分表真的适合你的系统吗?聊聊分库分表和NewSQL如何选择

    曾几何时,”并发高就分库,数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官爱问,博主爱写,考生爱背诵,似乎形成了一个闭环。 [En] I…

    数据库 2023年5月24日
    0109
  • 实验:非GTID 级联复制架构变为一主多从

    个个原创文章 欢迎讨论https://www.cnblogs.com/konggg/欢迎转载收藏,转载请注明来源,谢谢支持! Original: https://www.cnblo…

    数据库 2023年6月16日
    0109
  • 【Kubernetes系列】Kubernetes组件介绍

    文章目录 概述 Control Plane(控制面) * etcd(分布式的键值对数据存储系统) kube-apiserver(API服务器) kube-scheduler(调度器…

    数据库 2023年6月6日
    0106
  • 类的加载流程

    概述 什么是类加载呢? 我们知道一个Class文件编译完成之后是存在于磁盘的一个普通文件,如果想要执行,必然需要将 Class文件加载到…

    数据库 2023年6月11日
    075
  • [springmvc]乱码问题解决以及JSON和java对象转换的几种方法

    在web服务器配置中直接加上下面的过滤处理 encoding org.springframework.web.filter.CharacterEncodingFilter enco…

    数据库 2023年6月16日
    075
  • Consul 入门-运行

    HashiCorp Consul 是由 HashiCorp 公司开发的,它是一家专注于 DevOps 工具链的公司,旗下的明星级产品包括 Vagrant、Terraform、Vau…

    数据库 2023年6月6日
    076
  • [LeetCode]27. 移除元素

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原…

    数据库 2023年6月9日
    063
  • Windows 装机必备

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月6日
    074
  • Spring Boot 入门

    一、 Spring Boot 入门 1、Spring Boot 简介 简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案; 2、微…

    数据库 2023年6月6日
    0145
  • MySQL事务、隔离级别

    一、事务简介 事务是操作的集合,它是一个不可分割的工作单元。事务将向整个系统提交或取消操作请求,即这些操作要么同时成功,要么同时失败。 [En] A transaction is …

    数据库 2023年5月24日
    079
  • SQL学习日记(一) 语法篇

    对象名 关键字 描述 表 table 存储数据的逻辑单元,以行和列存在,行是数据记录,列是(属性)字段 系统表(数据字典) 存放数据库相关信息的表 程序员只可查看,不可修改 约束 …

    数据库 2023年5月24日
    075
  • 巧用自定义注解,一行代码搞定审计日志

    任何一个软件系统,都不可避免的会碰到【 信息安全】这个词,尤其是对于刚入行的新手,比如我,我刚入行的时候,领导让我做一个数据报表导出功能,我就按照他的意思去做,至于谁有权限操作导出…

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