本地网站做通用会员卡/百度推广客服投诉电话
1.如何使用事务:
1.1.事务的完成过程:
- 1.步骤1:开启事务
- 2.步骤2:一系列的DML操作
- 3.步骤3:事务结束状态:提交事务(COMMIT),中止事务(事务回滚ROLLBACK)
1.2.事务分类:
- 事务有两种方式:
- 1.
显式事务
- 2.
隐式事务
- 1.
2.显示事务与隐式事务的执行过程
2.1.显示事务的执行过程
a.步骤1:开启事务方式:
- 1.
START TRANSACTION
或者BEGIN
,作用是显式开启一个事务 - 2.
START TRANSACTION
语句相较于BEGIN
特别之处在于,后边可以跟随如下修饰符
- READ ONLY :标识当前事务是一个
只读事务
,也就是属于该事务的数据库操作只能读取数据,而不能修改数据
- READ WRITE :
(默认值)
标识当前事务是一个读写事务
,也就是属于该事务的数据库操作既可以读取数据,也可以修改数据。 WITH CONSISTENT SNAPSHOT
:启动一致性读
- READ ONLY :标识当前事务是一个
- 3.举例说明开启事务:
b.步骤2:一系列DML
操作
c.步骤3:提交事务(COMMIT)或中止事务(事务回滚ROLLBACK)
- 1.
savepoint
:事务操作过程中的一个保存点
,方便事务回滚到某个点的状态
- 2.其中关于
SAVEPOINT的相关操作有
:
2.2.隐式事务执行过程 :
a.关键字:autocommit
- 1.隐式事务中的关键字:
autocommit
- 2.如下可以看出默认是开启隐式事务,所以在此时的
每个DML操作都是自动提交
的。
- 3.默认是ON,如果不显式的使用START TRANSACTION或者BEGIN语句开启一个事务,
那么每一条DML语句都算是一个独立的事务
,这种特性称之为事务的自动提交。也就是说,不以START TRANSACTION或者BEGIN语句显式的开启一个事务,那么下边这两条语句就相当于放到两个独立的事务中去执行
UPDATE account SET balance = balance - 10 WHERE id = 1; #此时这条DML操作是一个独立的事务 UPDATE account SET balance = balance + 10 WHERE id = 2; #此时这条DML操作是一个独立的事务
b.关闭隐式事务中的自动提交:
关闭
自动提交
的功能,可以使用下边两种方法之一:
b1.方式1:
- 1.把
系统变量 autocommit 的值设置为 OFF(针对于DML操作是有效的,对DDL操作是无效的)
,就像这样:SET autocommit = OFF
; 或SET autocommit = 0
;此时,下面的两个语句就不再每一条是事务,假设我后面再执行一条commit或者rollback,那么这两条语句就组合在一起,成为一个事务
SET autocommit = OFF; #或 SET autocommit = 0;
- 2.这样的话,写入的多条语句就算是属于同一个事务了,直到我们显式的写出COMNIT语句来把这个事务提交掉,或者显式的写出ROLLBACK语句来把这个事务回滚掉
b2.方式2:
- 1.显式的的使用
START TRANSACTION
或者BEGIN
语句开启一个事务。这样在本次事务提交或者回滚前会暂时关闭掉自动提交的功能
START TRANSACTION;UPDATE account SET balance = balance - 10 WHERE id = 1;UPDATE account SET balance = balance + 10 WHERE id = 2; COMMIT; #或rollback;
补充:
Oracle 默认不自动提交,需要手写COMMIT命令,而MySQL 默认自动提交
c.关闭隐式事务案例:
- 方式1:使用SET autocommit = FALSE
# 如何关闭自动提交?
SET autocommit = FALSE; #针对于DML操作是有效的,对DDL操作是无效的。
UPDATE account SET balance = balance - 10 WHERE id = 1;
UPDATE account SET balance = balance + 10 WHERE id = 2;
COMMIT; #或rollback;
- 方式2:
在autocommit为true的情况下,使用start transaction 或begin开启事务,那么DML操作就不会自动提交数据
START TRANSACTION;
UPDATE account SET balance = balance - 10 WHERE id = 1;
UPDATE account SET balance = balance + 10 WHERE id = 2;
COMMIT; #或rollback;
3.隐式提交数据的情况都有哪些:
3.1.数据定义语言(Data definition language,缩写为:DDL
)
3.2.隐式使用或修改mysql数据库中的表
3.3.事务控制或关于锁定的语句
- 1.当我们在
一个事务还没提交或者回滚时就又使用 START TRANSACTION 或者 BEGIN 语句开启了另一个事务时,会 隐式的提交 上一个事务
- 2.当前的
autocommit 系统变量的值为 OFF
,我们手动把它调为 ON 时
,也会隐式的提交
前边语句所属的事务`SET autocommit = FALSE; UPDATE account SET balance = balance - 10 WHERE id = 1; UPDATE account SET balance = balance + 10 WHERE id = 2; SET autocommit = true;
- 3.使用
LOCK TABLES 、 UNLOCK TABLES
等关于锁定的语句也会 隐式的提交 前边语句所属的事务。
3.4.加载数据的语句:
- 使用LOAD DATA语句来批量往数据库中导入数据的时候,就会隐式提交前面的所有语句
e.关于mysql的一些复制的一些语句:
3.5.其他一些语句:
5 .事务的使用举例:
5.1.举例1:体会提交与回滚
a.首先明确什么是下DML和DDL的不同:
b.语句操作:
use MyBatis;# 1.使用MyBatis库
CREATE TABLE user3(NAME VARCHAR(15) PRIMARY KEY);# 2.建表
SHOW VARIABLES LIKE 'autocommit';# 3.查看autocommit的,确保是on-------------------------------------------------------------------------------
# 情况一:
BEGIN;# 4.开启事务
INSERT INTO user3 VALUES('张三');# 5.插入语句,且不会自动提交数据,但是select可以查询到
COMMIT;# 6.提交数据,这次事务就完成了BEGIN; #7.再开启一个新的事务
INSERT INTO user3 VALUES('李五'); #8.此时不会自动提交数据
INSERT INTO user3 VALUES('李五'); #9.受主键的影响,不能添加成功
ROLLBACK;# 10.回滚到上次commit的地方,所以:数据库中仅有张三这一条数据-------------------------------------------------------------------------------
# 情况二:
TRUNCATE TABLE user3; #清楚表数据,因为这个是DDL操作会自动提交数据,不会受autocommit变量的影响。BEGIN;#一次事务开始
INSERT INTO user3 VALUES('张三'); #此时不会自动提交数据
COMMIT;#事务完成,提交数据INSERT INTO user3 VALUES('李四');# 7.再次插入数据,语句前面没有写:begin,所以在默认情况下(即autocommit为true),DML操作也会自动提交数据INSERT INTO user3 VALUES('李四');# 8.因为name是主键,所以这里再插入询就报错了,即事务的失败的状态
ROLLBACK # 9.那么我们ROLLBACK,就会回到上次commit的地方,因为第7步有自动提交,所以就会回滚到这个地方。----------------------------------------------------------------------------------------
#情况三
RUNCATE TABLE user3;#1.清楚表数据
SELECT * FROM user3;#2.查看是否清楚成功SELECT @@completion_type;#定义变量,两个@@表示系统变量,默认值是0
SET @@completion_type = 1;# 开启链式BEGIN;#开启一个事务
INSERT INTO user3 VALUES('张三'); # 插入数据
COMMIT;#事务完成INSERT INTO user3 VALUES('李四');# 插入数据,隐式提交
INSERT INTO user3 VALUES('李四'); # 再次插入语句,报错
ROLLBACK;# 回滚到上次提交的地方
SELECT * FROM user3;# 查询表数据,发现现在表中只有张三一条数据,这个就是因为定义了变量的原因,下面来看下这个变量啥意思
c.针对上述案例3,说明下completion_type
的值代表的含义:
- 1.
completion=0
:这是默认情况。当执行COMNIT的时候会提交事务,在执行下一个事务时,还需要使START TRANSACTION 或者BEGIN来开启。 - 2.
completion=1
:这种情况下,当提交事务后,相当于执行了COMMIT AND CHAIN,也就是开启一个链式事务,即提交事务之后会开启一个相同隔离级别的事务。 - 3.
completion=2
:这种情况下CONMMIT=COMMIT AND RELEASE,也就是提交后,会自动与服务器断开连接
5.2.举例2:体会INNODB 和 MyISAM
a.MyISAM
:是不支持事务的
CREATE TABLE test1(i INT) ENGINE = INNODB;
CREATE TABLE test2(i INT) ENGINE = MYISAM;#针对于innodb表
BEGIN
INSERT INTO test1 VALUES (1);
ROLLBACK;
SELECT * FROM test1;#因为回滚了,所以就没有存储数据#针对于myisam表:不支持事务
BEGIN
INSERT INTO test2 VALUES (1);
ROLLBACK;
SELECT * FROM test2;#发现有一条数据,说明ROLLBACK没用,即不支持事务
5.3.举例3:体会savepoint:
CREATE TABLE user3(NAME VARCHAR(15),balance DECIMAL(10,2));# 创建表BEGIN #开启事务
INSERT INTO user3(NAME,balance) VALUES('张三',1000);# 插入一条数据
COMMIT;# 提交数据
SELECT * FROM user3; # 查询数据BEGIN;
UPDATE user3 SET balance = balance - 100 WHERE NAME = '张三';# 更改1
UPDATE user3 SET balance = balance - 100 WHERE NAME = '张三';# 又更改1
SAVEPOINT s1;# 此时设置保存点SELECT * FROM user3;//800元UPDATE user3 SET balance = balance + 1 WHERE NAME = '张三';# 再次update操作
ROLLBACK TO s1; #回滚到设置的保存点那一步,只是回滚,不会自动的提交,待回滚后,再自己输入语句继续进行操作ROLLBACK; # 继续执行回滚操作,又回到了最初的状态。
SELECT * FROM user3;# 查询确认是否回滚成功 1000元
相关文章:

事务的使用
1.如何使用事务: 1.1.事务的完成过程: 1.步骤1:开启事务2.步骤2:一系列的DML操作3.步骤3:事务结束状态:提交事务(COMMIT),中止事务(事务回滚ROLLBACK) 1.2.事务分类: …...

【免费】企业级大模型应用推荐:星环科技无涯·问知
无涯问知是星环科技发布的大模型应用系统,那么我们先简单了解下星环科技吧! 星环科技(股票代码:688031)致力于打造企业级大数据和人工智能基础软件,围绕数据的集成、存储、治理、建模、分析、挖掘和流通等数…...

从〇 搭建PO模式的Web UI自动化测试框架
Page Object模式简介 核心思想 将页面元素和操作行为封装在独立的类中,形成页面对象(Page Object)。每个页面对象代表应用程序中的一个特定页面或组件。 优点: 代码复用性高 页面对象可以在多个测试用例中复用。 易于维护 …...

在Ubuntu中重装Vscode(没有Edit Configurations(JSON)以及有错误但不标红波浪线怎么办?)
在学习时需要将vscode删除重装,市面上很多方法都不能删干净,删除之后拓展都还在。因此下面的方法可以彻底删除。注意,我安装时使用的是snap方法。 如果你的VScode没有Edit Configurations(JSON),以及有错误但不标红波浪线的话&…...

Oracle 用户-表空间-表之间关系常用SQL
问题: 当某一个表数据量特别大,突然插入数据一直失败,可能是表空间不足,需要查看表的使用率 用户-表空间-表之间关系:用户可以有多个表空间,表空间可以有多个表,表只能拥有一个表空间和用户 1.…...

家政服务管理系统小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,管理阿姨管理,家政公司管理,服务项目管理,家政预约管理,评价管理,留言板管理,系统管理 微信端账号功能包括…...

【算法】并查集的介绍与使用
1.并查集的概论 定义: 并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。比如说,我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。 主要构成: …...

Shell——运算符
在 Shell 编程中,运算符用于执行各种类型的操作,如算术运算、字符串比较、文件测试等。以下是 Shell 中常用的运算符分类和示例: 1. 算术运算符 Shell 中使用 expr 或 $(( ... )) 来进行算术运算。 : 加法-: 减法*: 乘法/: 除法%: 取余**:…...

SweetAlert2
1. SweetAlert2 SweetAlert2是一个基于JavaScript的库, 用于在网页上替换标准的警告框(alert), 确认框(confirm)和提示框(prompt), 并提供更加美观和用户友好的界面.需要在项目中引入SweetAlert2, 可以通过CDN链接或者将库文件下载到你的项目中来实现这一点. 通过CDN引入:<…...

c语言中比较特殊的输入函数
目录 一.getchar()函数 1.基本功能 2.使用方法 (1).读取单个字符 (2).读取多个字符(直到遇到换行符) (3).处理输入中的空白字符 3.返回值 4.应用场景 5.注意事项 二.fgets()函数 1.函数原型 2.工作原理 3.使用示例 (1).从标准输入读取一行…...

Java版自动化测试之Selenium
1. 准备 编程语言:Java JDK版本:17 Maven版本:3.6.1 2. 开始 声明:本次只测试Java的Selenium自动化功能 本次示例过程:打开谷歌游览器,进入目标网址,找到网页的输入框元素,输入指…...

【计算机网络】——计算机网络的性能指标
速率(speed) 连接在计算机网络上的主机在数字信道上传送数据的速率。 影响条件: 带宽(band width) 指在固定的时间可传输的资料数量 单位:bps或HZ 吞吐量(throughtput) 指对网络、…...

MongoDB数据类型介绍
MongoDB作为一种高性能、开源、无模式的文档型数据库,支持丰富的数据类型,以满足各种复杂的数据存储需求。本文将详细介绍MongoDB支持的主要数据类型,包括数值类型、字符串类型、日期和时间类型、布尔类型、二进制类型、数组、对象以及其他扩…...

【SpringBoot】SpringBoot 中 Bean 管理和拦截器的使用
目录 1.Bean管理 1.1 自定义Bean对象 1.2 Bean的作用域和生命周期 2.拦截器的使用 1.Bean管理 默认情况下,Spring项目启动时,会把我们常用的Bean都创建好放在IOC容器中,但是有时候我们自定义的类需要手动配置bean,这里主要介绍…...

Spring IoCDI(中)--IoC的进步
通过上文的讲解和学习, 我们已经知道了Spring IoC 和DI的基本操作, 接下来我们来系统的学习Spring IoC和DI 的操作. 前⾯我们提到IoC控制反转,就是将对象的控制权交给Spring的IOC容器,由IOC容器创建及管理对 象,也就是bean的存储。 1. Bean的…...

读软件开发安全之道:概念、设计与实施02经典原则
1. CIA原则 1.1. 软件安全都构建在信息安全的三大基本原则之上,即机密性(confidentiality)、完整性(integrity)和可用性(availability) 1.2. 双方交换的数据 1.2.1. 从技术上看,端点之间的数据交换本身就会削弱交互的机密性 1.2.2. 隐藏通信数据量的一…...

MySQL中处理JSON数据:大数据分析的新方向,详解与示例
文章目录 1. MySQL中的JSON数据类型2. JSON函数和运算符3. 创建JSON列的表4. 插入JSON数据5. 查询JSON数据6. 复杂查询和聚合7. JSON 数据的索引8. 总结 在当今的大数据时代,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式&a…...

【图形学】TA之路-矩阵
在 Unity 中,矩阵广泛用于处理各种图形变换,例如平移、旋转、缩放等。矩阵的使用不仅限于三维空间,还可以应用于二维空间的操作。了解矩阵及其运算对于游戏开发和计算机图形学非常重要。Unity 中使用的是行向量不是列向量,这个要注…...

LAMM: Label Alignment for Multi-Modal Prompt Learning
系列论文研读目录 文章目录 系列论文研读目录文章题目含义AbstractIntroductionRelated WorkVision Language ModelsPrompt Learning MethodologyPreliminaries of CLIPLabel AlignmentHierarchical Loss 分层损失Parameter Space 参数空间Feature Space 特征空间Logits Space …...

mac编译opencv 通用架构库的记录
1,通用架构 (x86_64;arm64)要设置的配置项: CPU_BASELINE CPU_DISPATCH 上面这两个我设置成SSE_3,其他选项未尝试,比如不设置。 CMAKE_OSX_ARCHITECTURES:x86_64;arm64 WITH_IPP:不勾选 2,contrib库的添加: 第一次…...

Python 向IP地址发送字符串
Python 向IP地址发送字符串 在网络编程中,使得不同设备间能够进行数据传输是一项基本任务。Python提供了强大的库,帮助开发者轻松地实现这种通信。本文将介绍如何使用Python通过UDP协议向特定的IP地址发送字符串信息。 UDP协议简介 UDP(用…...

上升响应式Web设计:纯HTML和CSS的实现技巧-1
响应式Web设计(Responsive Web Design, RWD)是一种旨在确保网站在不同设备和屏幕尺寸下都能良好运行的网页设计策略。通过纯HTML和CSS实现响应式设计,主要依赖于媒体查询(Media Queries)、灵活的布局、可伸缩的图片和字…...

利用java结合python实现gis在线绘图,主要技术java+python+matlab+idw+Kriging
主要技术javapythonmatlabidwKriging** GIS中的等值面和等高线绘图主要用于表达连续空间数据的分布情况,特别适用于需要展示三维空间中某个变量随位置变化的应用场景。 具体来说,以下是一些适合使用GIS等值面和等高线绘图的场景: 地形与地貌…...

Android全面解析之context机制(三): 从源码角度分析context创建流程(下)
前言 前面已经讲了什么是context以及从源码角度分析context创建流程(上)。限于篇幅把四大组件中的广播和内容提供器的context获取流程放在了这篇文章。广播和内容提供器并不是context家族里的一员,所以他们本身并不是context,因而…...

执行docker compose命令出现 Additional property include is not allowed
问题背景 在由docker-compose.yml的文件目录下执行命令 docker compose up -d 出现错误 Additional ininoperty include is not allowed 原因 我的docker-compose.yml 文件中出现了include标签旧版本的docker-compose 不支持此标签 解决办法 下载支持的docker-compose 解决…...

STM32通过I2C硬件读写MPU6050
目录 STM32通过I2C硬件读写MPU6050 1. STM32的I2C外设简介 2. STM32的I2C基本框图 3. STIM32硬件I2C主机发送流程 10位地址与7位地址的区别 7位主机发送的时序流程 7位主机接收的时序流程 4. STM32硬件与软件的波形对比 5. STM32配置硬件I2C外设流程 6. STM32的I2C.h…...

ubuntu2204-中文输入法-pycharm-python-django开发环境搭建
文章目录 1.系统常用设置1.1.安装中文输入法1.2.配置输入法1.3.卸载输入法1.4.配置镜像源2.java安装3.pycharm安装与启动4.卸载ubuntu2204默认版本5.安装Anaconda5.1.安装软件依赖包5.2.安装命令5.3.激活安装5.4.常用命令5.5.修改默认启动源6.安装mysql6.1.离线安装mysql6.2.在…...

【学习笔记】Matlab和python双语言的学习(一元线性回归)
文章目录 前言一、一元线性回归回归分析的一般步骤一元线性回归的基本形式回归方程参数的最小二乘法估计对回归方程的各种检验估计标准误差的计算回归直线的拟合优度判定系数显著性检验 二、示例三、代码实现----Matlab四、代码实现----python回归系数的置信区间公式残差的置信…...

LeetCode //C - 316. Remove Duplicate Letters
316. Remove Duplicate Letters Given a string s, remove duplicate letters so that every letter appears once and only once. You must make sure your result is the smallest in lexicographical order among all possible results. Example 1: Input: s “bcabc”…...

【ARM+Codesys 客户案例 】RK3568/A40i/STM32+CODESYS在工厂自动化中的应用:PCB板焊接机
现代化生产中,电子元件通常会使用自动化设备来进行生产,例如像PCB(印刷电路板)的组装。但是生产过程中也会面临一些问题,类似于如何解决在PCB板上牢固、精准地安装各种组件呢?IBL Lttechnik GmbH公司的CM80…...