MySQL的事务-原子性

MySQL的事务处理具有ACID的特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

1. 原子性指的是事务中所有操作都是原子性的,要么全部完成,要么全部不完成。这意味着事务执行过程中的任何错误都会导致事务回滚到开始前的状态,所有操作就像没有发生一样。

原子性体现如下:

假设有一张账号表,现在要进行转账操作(从zhangsan账号转1000元到lisi账号)

没有事务控制的情况下,操作应该如下

update account set money=money-1000 where name='zhangsan';update account set money=money+1000 where name='lisi';

如果在处理的过程中出错了,那么可能就会导致数据只更新了一般,比如

update account set money=money-1000 where name='zhangsan';
出错了...update account set money=money+1000 where name='lisi';

由于“出错了...”不是sql语句,应该执行到“出错了...”就会抛错,导致

update account set money=money+1000 where name='lisi'; 没有被执行。

因此就会发现钱丢了1000元。最终结果就会变成

造成这个结果的原因如下:

(1)mysql的事务是自动提交的, 可以使用select @@autocommit进行查看

@@autocommit=1表示事务是自动提交的;

(2)这两个sql语句分别是两个单独的事务,应该当执行完第一个语句的时候,中间出错了,那么第一个语句的结果已经被提交了,而第二个语句没有被执行到。

update account set money=money-1000 where name='zhangsan';
出错了...update account set money=money+1000 where name='lisi';

解决上面问题的方式有两种,一是将事务改为手动提交,二是开启事务,具体的解决方式如下

(1)事务改为手动提交

set @@autocommit=0;update account set money=money-1000 where name='zhangsan';
出错了...update account set money=money+1000 where name='lisi';

当sql出错时,进行rollback回滚,就不会提交事务了。

(2)开启事务

start transaction;update account set money=money-1000 where name='zhangsan';
出错了...update account set money=money+1000 where name='lisi';

当sql出错时,不提交事务,进行rollback回滚,同样可以保证事务的原子性。

以上就是事务的原子性,后续文章将进行一致性、隔离性、持久性的学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/297794.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十四节TypeScript 联合类型

1、简介 联合类型可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。 注意:只能赋值指定的类型,如果赋值其它类型就会报错的。 2、创建联合类型的语法格式: Type1|Type2|Type3 实例&a…

收银管理系统怎样帮助商家很好地经营服装门店

收银管理系统对于服装门店的经营可以提供多方面的帮助,以下是一些具体的优势和功能: 1. 快速准确的收银:收银管理系统可以实现快速、准确的收银操作,通过条码扫描或手动输入商品信息,自动计算价格并生成收据。这样可以…

CPP虚析构函数

#include<iostream> using namespace std;class base {public:base(){};virtual ~base(){}; };// 在类声明中声明纯虚析构函数 //base::~base() {}class father: public base {public:~father(){cout << "father" << endl;} };int main() {base* a…

CnosDB:深入了解时序数据处理函数

CnosDB 是一个专注于时序数据处理的数据库&#xff0c;旨在解决时序数据存储与分析问题&#xff0c;为用户提供高效的时序数据管理与查询便利。为了实现这一目标&#xff0c;CnosDB 实现了一系列专用函数&#xff0c;快来和CC一起来看看吧&#xff01; CnosDB&#xff1a;深入了…

机器学习-数学学习汇总

***I数学只是一个工具&#xff0c;会使用&#xff0c;能解决问题就可以了&#xff0c;精确例如到3.14够用就可以了*** 微积分作用&#xff1a;解决非线性问题 学习&#xff1a;27分。 高中数学&#xff1a; 1.高中数学所有知识点表格总结&#xff0c;高中知识点一个不漏&am…

C++类与对象(中)第二篇

前言&#xff1a; C语言中使用运算符是对内置类型的数据进行操作&#xff0c;但是在C中有了对象&#xff0c;导致对象无法通过运算符进行运算&#xff0c;故引入了运算符重载即需要重新定义这些运算符&#xff0c;赋予已有运算符新的功能&#xff0c;使它能够用于特定类型执行特…

虚拟机安装windows2012和虚拟机安装国产系统deepin

虚拟机安装windows2012和虚拟机安装国产系统deepin 一.安装windows20121.安装VMWare虚拟机2.1.注意点一&#xff1a;VMWare虚拟网卡2.2.注意点二&#xff1a;配置虚拟网络编辑器3.安装配置Windows Server 2012 R2 二.虚拟机安装deepin1.deepin官网下载ios镜像2.deepin下载合适的…

统计定界子数组的数目

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 给你一个整数数组 nums 和两个整数 minK 以及 maxK 。 nums 的定界子数组是满足下述条件的…

老胡的周刊(第121期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 clone-voice[2] 一个带 web 界面的声音克隆工…

【大数据】NiFi 的基本使用

NiFi 的基本使用 1.NiFi 的安装与使用1.1 NiFi 的安装1.2 各目录及主要文件 2.NiFi 的页面使用2.1 主页面介绍2.2 面板介绍 3.NiFi 的工作方式3.1 基本方式3.2 选择处理器3.3 组件状态3.4 组件的配置3.4.1 SETTINGS&#xff08;通用配置&#xff09;3.4.2 SCHEDULING&#xff0…

设计模式--职责链模式

实验15&#xff1a;职责链模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解职责链模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用职责链模式解决实际问题。 [实验任务]&#xff1a;财务审批 某物资管理系统…

Window系统显存不足时利用共享内存继续运行

存在问题 在进行实验过程中&#xff0c;时常碰到显存不足的问题&#xff0c;此时要么需要减小模型体积&#xff0c;要么减小batch-size大小&#xff0c;但这势必会对结果造成一定影响&#xff0c;此时我们可以使用GPU共享内存的方法来扩充显存。 解决方法 GPU有几个重要参数…