当前位置: 首页 > article >正文

Mysql-------事务

事务

一、事务

(一)什么是事务:

MySQL数据库事务:(database transaction): 事务是由一组SQL语句组成的逻辑处理单元,这些操作要么全做要么全不做,是一个不可分割的工作单位。

※ MySQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型不支持!

数据库默认事务是自动提交的,也就是发一条 sql 它就执行一条。如果想多条 sql 放在一个事务中执行,则需要使用事务进行处理。当我们开启一个事务,并且没有提交,MySQL 会自动回滚事务,或者我们使用 rollback 命令手动回滚事务。

(二)为什么使用事物:

通过将一组操作组成一个操作单元,执行时,要么全部成功,要么全部失败的单元。

例如:A账户汇款给B账户1000元。

A账户-1000

B账户+1000

以上操作对应数据库为两个update。这两个操作属于一个事物。否则,可能会出现A账户钱少了,B账户钱没增加的情况;或者因为A账户的余额不足(少于1000)不能扣除1000,而B账户却增加1000。

(三)事务四大特性:

事务是必须满足4个条件(ACID)

原子性(Autmic):事务必须是原子工作单元,不能被分隔的,事务中的操作要么全部执行,要么全都不执行,不能只完成部分操作。

一致性(Consistency):事务开始之前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态。数据库一致性的定义是由用户负责的。例如,在银行转账中,用户可以定义转账前后两个账户金额之和保持不变。

  隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰,这些通过锁来实现。

  持久性(Durability):指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

事务的 ACID 原则保证了一个事务或者成功提交,或者失败回滚,二者必居其一。因此,它对事务的修改具有可恢复性。即当事务失败时,它对数据的修改都会恢复到该事务执行前的状态。

(四)MySQL事务处理的方法:

用BEGIN或START TRANSACTION,ROLLBACK,COMMIT来实现事务

START TRANSACTION | BEGIN  

#开启事务

COMMIT 

#提交当前事务,执行永久操作。

ROLLBACK 

#回滚当前事务到开始点,取消上一次开始点后的所有操作。

MySQL默认是自动提交的,也就是你提交一个SQL QUERY,它就直接执行!

SET AUTOCOMMIT = {0 | 1} 设置事务是否自动提交,默认是自动提交的。

0:禁止自动提交

1:开启自动提交。

注意:MySQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持!

MySQL> set autocommit=0;

MySQL> delimiter //

MySQL> start transaction;

    -> update books set bName="ccc" where bId=1;

    -> update books set bName="ddd" where bId=2;

    -> commit; //

MySQL> delimiter ;

测试,查看是否完成修改:

MySQL> select bName from books where bId=1 or bId=2;

我们测试回滚操作,首先看我们的数据库存储引擎是否为innodb

MySQL> show create table books;

为MyISAM无法成功启动事务,虽然提交了,却无法回滚

修改数据库存储引擎为innodb

MySQL> alter table books engine=innodb;

MySQL> alter table category engine=innodb;

MySQL> show create table books;

MySQL> select bName from books where bId=1 or bId=2;

重新开启事务,并测试回滚

MySQL> delimiter //

MySQL> start transaction;

    -> update books set bName="HA" where bId=1;

    -> update books set bName="LB" where bId=2;

    -> commit //

MySQL> delimiter ;

MySQL> select bName from books where bId=1 or bId=2;

MySQL> rollback;  #回滚

Query OK, 0 rows affected (0.00 sec)

查看结果:  

MySQL> select bName from books where bId=1 or bId=2;

回滚失败,因为我们commit已经提交了,并且执行成功了

这次开启事务,不提交

MySQL> delimiter //

MySQL> start transaction; 

MySQL> update books set bName="AH" where bId=1; 

MySQL> update books set bName="BL" where bId=2 

MySQL> //   #开启事务,不提交

MySQL> delimiter ;

MySQL> select bName from books where bId=1 or bId=2;

回滚:

MySQL> rollback;

MySQL> select bName from books where bId=1 or bId=2;

回滚成功

可以看到,执行rollback回滚命令后,rollback使数据表回滚到了事物开始前的状态。很多时候一个事物会包含多条语句,而出现问题需要回滚时,并不一定是要回滚到begin之前的状态,有可能是某条语句执行后的状态,这时要使用savepoint定义回滚点,rollback决定回滚到的位置。

例如:以test_db数据库的stu表为例,表结构如下所示:

关闭MySQL的自动提交功能:

MySQL> set autocommit=0;

MySQL> begin;

MySQL> insert into stu values(1,'berry');

MySQL> savepoint s1;

MySQL> insert into stu values(2,'linda');

MySQL> savepoint s2;

执行第一条插入语句后,定义了回滚点s1,执行第二条插入语句后,定义了回滚点s2,如果后面直接使用rollback命令,这两条插入语句都将失效,现在使用回滚点进行回滚。

执行回滚前,查询stu表中数据:

执行rollback回滚到s1回滚点

回滚到了s1,第一条插入的数据可以查询出来,但是并没有提交,如果需要保存到数据库,使用commit命令提交。

相关文章:

Mysql-------事务

事务 一、事务 (一)什么是事务: MySQL数据库事务:(database transaction): 事务是由一组SQL语句组成的逻辑处理单元,这些操作要么全做要么全不做,是一个不可分割的工作单位。 ※…...

【Java进阶学习 第五篇】JDK8、9中的接口新特性

接口新特性 可以提升代码的复用性,减少冗余 JDK8中接口的新特性主要可以允许调用默认方法和静态方法;JDK9中接口的新特性为可以运行调用私有方法供本类方法使用 JDK8新特性 接口中可以定义有方法体的方法(默认或静态) 允许调用…...

TypeScript学习:初学

安装等配置指令 安装TypeScript npm i typescript -g 检查版本 tsc -v npx tsc -v 运行ts文件及js文件 npx tsc 文件名.ts node 文件名.js 安装ts-node脚手架 npm i ts-node -g 检查脚手架版本 npx ts-node -v 初始化ts状态 npx tsc -- init 使用脚手架运行ts文件…...

基于Martin的全国基础底图实现

概述 前面有文章基于Martin实现MapboxGL自定义底图分享了Martin的使用,本文使用网络收集的数据实现了全国基础数据的收集和基础底图。 实现后效果 实现 1. 数据准备 实例中包含如下数据: 边界线和九段线数据省边界面数据省会城市点数据市边界面数据…...

网络安全:防范NetBIOS漏洞的攻击

稍微懂点电脑知识的朋友都知道,NetBIOS 是计算机局域网领域流行的一种传输方式,但你是否还知道,对于连接互联网的机器来讲,NetBIOS是一大隐患。 漏洞描述 NetBIOS(Network Basic Input Output System,网络基本输入输…...

一周学会Flask3 Python Web开发-客户端状态信息Cookie以及加密

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili HTTP是无状态(stateless)协议。也就是说,在一次请求响应结束后,服务器不会留下任何关于对…...

机器学习面试八股文——决战金三银四

大家好,这里是好评笔记,公主 号:Goodnote,专栏文章私信限时Free。本笔记的任务是解读机器学习实践/面试过程中可能会用到的知识点,内容通俗易懂,入门、实习和校招轻松搞定。 公主号合集地址 点击进入优惠地…...

Visual studio 2022 将打开文件的方式由单击改为双击

1. 打开vs2022,选择Tools -> Options打开Options设置页面 2. 在左侧依次展开Environment, 选择Tabs and Windows 3. 在右侧面板往下拖拽滚动条,找到Preview Tab section, unchecked "Preview selected files in Solution Explorer (Altclick t…...

【Akashic Records】THE EGG

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Akashic Records 文章目录 💯观后感一、宇宙的孤寂与个人成长:二、选择与责任:三、灵性与世界的连接:四、选择如何改变命运:结语: 💯…...

Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析

Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析(详细版) 一、Tio-Boot 简介 Tio-Boot 是基于 Tio 框架的 Spring Boot Starter 扩展,提供高性能、低延迟的网络通信能力,支持 TCP/UDP 协议及 WebSocket 协议,适用…...

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(一)

项目包含5个模块 1.首页 (聊天主页) 2.注册 3.登录 4.个人资料 5.设置主题 一、配置开发环境 建立项目文件夹 mkdir chat-project cd chat-project mkdir server && mkdir webcd server npm init cd web npm create vitelatest 创建前端项目时我们选择javascrip…...

ant design 疑惑记录 Dropdown.Button

onMenuClick是点击展开的 子项的点击事件 Actions的点击事件是什么? 解答: 也是个按钮Button,也有自己的onClick事件 const onMenuClick (e) > {console.log(click, e); }; const otherClick (e) > {console.log(其他操作主按钮…...

Perplexity AI:通过OpenAI与DeepSeek彻底革新搜索和商业策略

在不断发展的AI领域,Perplexity AI已经成为一个独特的力量,正在重塑我们搜索信息的方式。 通过结合前沿的AI工具,Perplexity提供了更智能、更像人类的搜索体验。那么,这个平台与竞争对手有何不同呢? 让我们一起探索Perplexity的商业策略、它如何通过变现服务以及如何利用…...

什么是Firehose?它的作用是什么?

目录 1. Firehose 的作用 2. Firehose 文件(prog_firehose.mbn) 如何获取 Firehose 文件? 3. Firehose 模式(EDL Mode) 如何进入 EDL 模式? 4. Firehose 命令(低级操作) 5. F…...

rkipc main.c 中 rk_param_init函数分析

rk_param_init函数 这个函数是用来读取配置文件进行参数配置 这个函数在 luckfox-pico/project/app/rk_smart_door/smart_door/common/uvc/param/param.c 中 这个函数在main函数中被调用 //通过-c 配置文件路径 把配置文件传进来 case c:rkipc_ini_path_ optarg;//调用&am…...

SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)

SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)...

Missing required prop: “maxlength“

背景&#xff1a; 封装一个使用功能相同使用频率较高的input公共组件作为子组件&#xff0c;大多数长度要求为200&#xff0c;且实时显示统计子数&#xff0c;部分input有输入提示。 代码实现如下&#xff1a; <template><el-input v-model"inputValue" t…...

在windows下安装windows+Ubuntu16.04双系统(下)

这篇文章的内容主要来源于这篇文章&#xff0c;为正式安装windowsUbuntu16.04双系统部分。在正式安装前&#xff0c;若还没有进行前期准备工作&#xff08;1.分区2.制作启动u盘&#xff09;&#xff0c;见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …...

数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)

数据库驱动找起来好麻烦&#xff0c;我整理到了一起&#xff0c;需要的朋友免费下载&#xff1a;驱动下载 目前收录了Oracle、Mysql、达梦、Postgresql的数据库驱动的多个版本&#xff0c;后续可能会分享更多。...

业务流程相关的权威认证和培训有哪些

业务流程的认证和培训种类繁多&#xff0c;旨在帮助专业人士掌握业务流程管理 (BPM) 的知识和技能&#xff0c;从而提升个人职业发展和组织运营效率。下面分别介绍&#xff1a; 一、 业务流程认证和培训的种类 业务流程的认证和培训可以大致分为以下几类&#xff0c;涵盖了不…...

java(spring boot)实现向deepseek/GPT等模型的api发送请求/多轮对话(附源码)

我们再启动应用并获取api密钥后就可以对它发送请求了&#xff0c;但是官方文档对于如何进行多轮对话以及怎么自定义参数并没有说的很清楚&#xff0c;给的模板也没有java的&#xff0c;因此我们需要自己实现。 import org.json.JSONArray; import org.json.JSONObject;import j…...

vivado修改下载器下载速率

Error Launching Program X Error while launching program: fpga configuration failed. DONE PIN is not HIGH 原因是下载器速度太快了。先从任务管理器中关闭hw_server.exe试一下,要是不行就按下面三种方法解决。 第一种方法可以不用修改下载速度,直接先从vivado中将bit流…...

巧妙实现右键菜单功能,提升用户操作体验

在动态交互式图库中&#xff0c;右键菜单是一项能够显著提升用户操作便捷性的功能。它的设计既要响应用户点击位置&#xff0c;又需确保菜单功能与数据操作紧密结合&#xff0c;比如删除图片操作。以下将通过一段实际代码实现&#xff0c;展示从思路到实现的详细过程。 实现右键…...

【Altium Designer】BGA扇出

目录 一、前期规则设置 1.调整Clearance规则 2.定义线宽与过孔参数 3.配置Fanout规则 二、自动扇出操作 1.选择目标器件 2.设置扇出参数 3.执行扇出 三、手动优化与验证 1.检查未成功扇出的引脚 2.调整过孔布局 3.验证平面完整性 四、高级技巧 1.分区域扇出 2.差分对优先…...

无前端经验如何快速搭建游戏站:使用 windsurf 从零到上线的详细指南

页面初稿设计 寻找参考网站&#xff1a;浏览互联网&#xff0c;寻找一个或多个你认为设计出色的网站&#xff0c;将你感兴趣的页面部分进行截图保存&#xff0c;这些截图将成为你设计游戏站页面初稿的重要参考。利用 v0.dev 进行页面设计&#xff1a;打开 v0.dev 网站&#xf…...

mysql之事务深度解析与实战应用:保障数据一致性的基石

文章目录 MySQL 事务深度解析与实战应用&#xff1a;保障数据一致性的基石一、事务核心概念与原理1.1 事务的本质与意义1.2 事务的 ACID 特性1.2.1 原子性 (Atomicity)1.2.2 一致性 (Consistency)1.2.3 隔离性 (Isolation)1.2.4 持久性 (Durability) 1.3 事务隔离级别与并发问题…...

CASS11快捷键设置

快捷键增加如下&#xff1a; tr----trim bo---(-boundary) ro---rotate ed----explode of---offset qs---qselect dp---ptype re---regen rec---rectang br---break dis---distuser do---draworder...

Python进行简单医学影像分析的示例

以下是一个使用Python进行简单医学影像分析的示例&#xff0c;这里我们以常见的DICOM格式医学影像为例&#xff0c;使用pydicom库读取DICOM文件&#xff0c;使用matplotlib进行影像显示&#xff0c;使用scikit - image进行简单的影像处理。 需求复现讲解 1. 安装必要的库 在…...

anaconda安装报错

一 anaconda报错 Cannot open 本地 Failed to start [powershell.exe, -ExecutionPolicy, RemoteSigned, -NoExit, -Command, & D:\anaconda3\condabin\conda.bat shell.powershell hook | Out-String | Invoke-Expression ; try { conda activate D:/anaconda3/envs/1-man…...

git从本地其他设备上fetch分支

在 Git 中&#xff0c;如果你想从本地其他设备上获取分支&#xff0c;可以通过以下几种方式实现。不过&#xff0c;需要注意的是&#xff0c;Git 本身是分布式版本控制系统&#xff0c;通常我们是从远程仓库&#xff08;如 GitHub、GitLab 等&#xff09;拉取分支&#xff0c;而…...