由浅入深学MySQL之事务全攻略

前言

从今天开始本系列就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。


全文大约 【1707】 字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考...

一. 事务

事务这个概念不太容易理解,所以我们通过下面一个模拟转账的案例来让各位小伙伴理解事务到底是什么

1. 模拟转账

生活当中转账是转账方账户扣钱,收账方账户加钱。我们用数据库操作来模拟现实转账。

举个栗子: 数据库模拟转账。

#A 账户转账给 B 账户 1000 元。
#A 账户减1000 元
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;

#B 账户加 1000 元
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;

上述代码完成了两个账户之间转账的操作。

举个栗子: 模拟转账错误。

#A 账户转账给 B 账户 1000 元。
#A 账户减1000 元
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;
#断电、异常、出错...

#B 账户加 1000 元
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;

上述代码在减操作后过程中出现了异常或加钱语句出错,会发现,减钱仍旧是成功的,而加钱失败了!

注意: 每条 SQL 语句都是一个独立的操作,一个操作执行完对数据库是永久性的影响。

2. 事务的概念

事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

各位小伙伴是否理解了呢?那么我们再做个小小的总结:

事务就是让多个操作形成一个整体,在这个整体中的多个操作要么执行全成功,要么执行全失败。这就是事务的作用。

3. 事务的执行过程

开始过程:连接到数据库,执行一条DML语句。 上一个事务结束后,又输入了一条DML语句,即事务的开始。

结束过程如下:

1).提交:

a.显示提交:commit;

b.隐式提交:一条创建、删除的语句,正常退出(客户端退出连接)。

2).回滚:

a.显示回滚:rollback;

b.隐式回滚:非正常退出(断电、宕机),执行了创建、删除的语句,但是失败了,会为这个无效的语句执行回滚。

4. 事务的原理

数据库会为每一个客户端都维护一个空间独立的缓存区(回滚段),一个事务中所有的增删改语句的执行结果都会缓存在回滚段中,只有当事务中所有SQL语句均正常结束(commit),才会将回滚段中的数据同步到数据库。否则无论因为哪种原因失败,整个事务将回滚(rollback)。

5. 事务的特性

下面给各位小伙伴系统的说一下事务都具有哪些特性和功能。

通常叫做ACID原则,因为ACID是由下面四个单词的首字母构成的。

Atomicity(原子性): 表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败

Consistency(一致性) :表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态

Isolation(隔离性): 事务查看数据操作时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

Durability(持久性): 持久性事务完成之后,它对于系统的影响是永久性的。

6. 事务应用

应用环境:基于增删改语句的操作结果(均返回操作后受影响的行数),可通过程序逻辑手动控制事务提交或回滚。

举个栗子: 事务完成转账,A账户给B账户转账。

#1.开启事务
START TRANSACTION;|setAutoCommit=0;#禁止自动提交 setAutoCommit=1;#开启自动提交
#2.事务内数据操作语句
UPDATE ACCOUNT SET MONEY = MONEY-1000 WHERE ID = 1;
UPDATE ACCOUNT SET MONEY = MONEY+1000 WHERE ID = 2;
#3.事务内语句都成功了,执行 COMMIT;
COMMIT;
#4.事务内如果出现错误,执行 ROLLBACK;
ROLLBACK;

注意: 开启事务后,执行的语句均属于当前事务,成功再执行 COMIIT,失败要进行 ROLLBACK。

二. 结语

最后在这里对本文核心要点进行总结:

  1. 事务能够在增删改操作中保证数据的一致性,所以在增删改操作中必须加入事务。

  2. 各位小伙伴一定要熟练的记住事务的操作过程以及ACID原则,非常重要哦。

原文链接:https://www.cnblogs.com/qian-fen/p/17385366.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:由浅入深学MySQL之事务全攻略 - Python技术站

(0)
上一篇 2023年5月9日
下一篇 2023年5月9日

相关文章

  • 如何使用Python将一个CSV文件中的数据导入到数据库中?

    以下是如何使用Python将一个CSV文件中的数据导入到数据库中的完整使用攻略。 使用Python将一个CSV文件中的数据导入到数据库中的前提条件 在Python将一个CSV文件中的数据导入到数据库中前,需要确保已经安装并启动了支持导入数据的数据库,例如MySQL或PostgreSQL,并且需要安装Python的相应数据库驱动程序,例如mysql-conne…

    python 2023年5月12日
    00
  • 详解Python二维数组与三维数组切片的方法

    关于“详解Python二维数组与三维数组切片的方法”的攻略,以下是完整的讲解: 1. 二维数组切片 1.1 二维数组的定义 在Python中,我们可以使用列表(List)来定义二维数组。例如,下面这个代码可以生成一个3×3的二维数组: matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 1.2 二维数组的切片方法 我们可以使…

    python 2023年6月6日
    00
  • python实现Excel多行多列的转换的示例

    下面我将介绍如何用 Python 实现 Excel 多行多列的转换示例,包括以下内容: 安装必要的库 读取Excel文件数据 转换Excel文件数据 写入转换后数据到新的Excel文件中 以下是完整实例教程: 1. 安装必要的库 这个程序需要用到 pandas 和 openpyxl 库,所以需要先安装: pip install pandas openpyxl…

    python 2023年5月13日
    00
  • openCV入门学习基础教程第一篇

    下面我详细讲解一下“openCV入门学习基础教程第一篇”的完整攻略。 一、概述 OpenCV(全称为Open Source Computer Vision Library)是一个跨平台的开源计算机视觉库。它可以帮助我们高效、优雅地编写计算机视觉相关代码。本教程旨在帮助大家了解OpenCV,并学习一些基础操作。 二、安装OpenCV 安装OpenCV有两种方法…

    python 2023年5月19日
    00
  • python绘制三维图的详细新手教程

    下面是关于“python绘制三维图的详细新手教程”的完整攻略: 一、准备工作 在开始绘制三维图之前,我们需要配置好相应的开发环境和库。 首先需要确保已经安装了Python以及所需的库,比如numpy、matplotlib等。 其次,需要在代码中加入以下代码,引入相应的库: import numpy as np import matplotlib.pyplot…

    python 2023年5月19日
    00
  • 在Python中用多维系数数组对x点的Hermite_e数列进行评估

    在Python中,我们可以使用SciPy库中的special模块来对Hermite_e数列进行评估。这个模块提供了一个hermitee命令,可以用于计算一组给定值上的Hermite_e函数的值。 首先,我们需要导入相关的模块和库,并定义要评估的数值数组x。以下是一个简单的示例: import numpy as np from scipy import spe…

    python-answer 2023年3月25日
    00
  • Python的集合类型之set和frozenset详解

    Python的集合类型之set和frozenset详解 什么是集合? 集合(set)是Python中的一种数据类型,用于存储一组互不相同的元素。集合中的元素必须是不可变的(immutable),例如数字,字符串和元组,不能包含可变数据类型(mutable),例如列表、字典和集合本身。 在Python 2.3之前,集合类型是不存在的,只能用列表或字典来模拟集合…

    python 2023年5月13日
    00
  • python使用clear方法清除字典内全部数据实例

    Python中的字典是用于保存键值对的无序集合。如果需要清空一个字典的全部数据实例,可以使用clear()方法实现。下面是具体的攻略步骤: 1. 使用clear()清除字典内所有数据示例 # 创建一个字典 my_dict = {‘a’: 1, ‘b’: 2, ‘c’: 3} # 使用clear()方法清空字典 my_dict.clear() # 输出清空后的…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部