【数据库】关系数据库管理系统 (RDBMS) 中事务处理的四个特性ACID

给自己一个目标,然后坚持一段时间,总会有收获和感悟!
数据库事务是指一组数据库操作(例如插入、更新、删除等),被视为一个单独的逻辑操作单元,并且要么全部执行成功,要么全部不执行,也不会执行部分操作。在执行期间,要么取得所有所需要的资源,要么都不取得任何资源,以确保数据的一致性、完整性和可靠性。

目录

  • 一、事务四个特性
    • 1.1、原子性
    • 1.2、一致性
    • 1.3、隔离性
    • 1.4、持久性
  • 二、代码举例
  • 三、事务相关操作
    • 3.1、回滚事务
    • 3.2、保存点
    • 3.3、独立的连接
    • 3.4、并发控制与锁定
  • 四、共享锁
    • 4.1、特点
    • 4.2、代码举例

在这里插入图片描述

一、事务四个特性

数据库事务具有四个特性,通常称为 ACID 特性

1.1、原子性

原子性(Atomicity),一个事务中的所有操作要么全部执行,要么全部不执行,不会有部分成功和部分失败的情况。

1.2、一致性

一致性(Consistency),事务执行的结果应该符合数据库的约束条件和逻辑。

1.3、隔离性

隔离性(Isolation),并发执行的多个事务相互独立,不会相互干扰。每个事务应该只能看到其自身提交之前的数据。

1.4、持久性

持久性(Durability),事务提交后所做的修改应该永久地保存到数据库中,并且即使在数据库崩溃等异常情况下,修改也不应该丢失。

为了保证事务的原子性和一致性,通常使用“回滚”和“提交”来控制事务状态。
数据库事务在应用程序中通常采用事务控制命令(如 BEGIN TRANSACTION、COMMIT TRANSACTION 和 ROLLBACK TRANSACTION)来实现。
事务的设计和实现需要考虑到多方面的因素,如访问控制、并发控制、锁定、日志记录、备份和恢复等问题。
不同的数据库系统会针对这些问题提供不同的解决方案,因此数据库事务功能的实现具有相当的复杂性和灵活性。

二、代码举例

在 Sql Server 中,可以使用 Transact-SQL (T-SQL) 语言编写具体实现 ACID 特性的事务代码,

  • 示例如下
    BEGIN TRANSACTION --开启一个事务
    INSERT INTO Customers (CustomerName, ContactName, City, Country)
    VALUES (‘Alfreds Futterkiste’, ‘Maria Anders’, ‘Berlin’, ‘Germany’)

    UPDATE Suppliers
    SET ContactName = ‘Christina Berglund’
    WHERE SupplierName = ‘Alfreds Futterkiste’

COMMIT TRANSACTION --提交事务,以上两条 SQL 语句构成一个事务。

以上代码中的 BEGIN TRANSACTION 和 COMMIT TRANSACTION 标记了一个事务的开始和结束,同时在这个事务中包含了两条 SQL 语句,即插入一条数据和更新一条数据。
如果这个事务执行过程中出现了异常,比如 SQL 语句格式错误或者数据库连接中断等情况,那么事务就会回滚到初始状态,保证了事务的原子性和一致性。
在一个并发访问的数据库系统中,这样的实现可以保证事务的隔离性和持久性。

三、事务相关操作

除了上述示例中的基本事务操作外,还有其他一些常用的事务相关操作,

3.1、回滚事务

回滚事务(ROLLBACK TRANSACTION),在事务执行过程中,如果发生了错误或者需要撤销事务的操作,可以使用
ROLLBACK TRANSACTION 命令回滚事务,将事务中的所有修改操作都撤销回滚到事务开始前的状态。

3.2、保存点

保存点(SAVEPOINT),在事务中设置保存点,可以在事务执行过程中对部分操作进行分组,以便于根据需要回滚到保存点所标记的位置。
当事务中的某部分操作出现错误时,可以使用 ROLLBACK TRANSACTION SavePointName 命令回滚到保存点所处的位置。

3.3、独立的连接

独立的连接(Isolated Connections),在某些情况下,多个事务可能需要在独立的数据库连接中执行,这样可以提供更高的隔离级别。
每个事务可以使用一个单独的数据库连接,这样可以避免在某个事务中影响到其他事务。

3.4、并发控制与锁定

并发控制与锁定(Concurrency Control and Locking),为了保证事务的隔离性,数据库系统使用并发控制机制和锁定来协调多个事务对共享资源的访问。
在 Sql Server 中,可以使用锁定机制(如共享锁、排他锁等)来控制并发事务之间的互斥和顺序执行。

通过结合以上的事务操作和并发控制机制,可以在 Sql Server 数据库中实现更复杂的事务处理逻辑,并满足 ACID 特性。
具体的实现方式会根据具体的业务需求和数据库模型而有所不同。

四、共享锁

共享锁(Shared Lock)是数据库中的一种锁定机制,用于实现并发事务的读取操作。当一个事务获取了共享锁后,其他事务也可以获取该数据的共享锁,以允许它们同时读取相同的数据。

4.1、特点

1)多个事务可以同时持有共享锁,以允许并发读取操作。
2)共享锁不允许其他事务对数据进行修改,保护数据的一致性和完整性。
3)共享锁是一种共享资源,多个事务可以同时持有,但在一个事务持有共享锁的同时,其他事务无法获得排它锁。

4.2、代码举例

下面是一个示例,展示了如何使用共享锁(Shared Lock)来对数据进行并发读取

-- 共享锁示例
BEGIN TRANSACTION-- 申请共享锁
SELECT * FROM Customers WITH (HOLDLOCK, ROWLOCK) WHERE City = 'guangzhou'-- 执行一些读操作COMMIT TRANSACTION

在上述示例中,SELECT 语句中添加了锁定提示(Lock Hints)HOLDLOCKROWLOCKHOLDLOCK 表示在整个事务期间保持锁定,ROWLOCK 表示以行为单位进行锁定。

通过在 SELECT 语句中使用共享锁,多个事务可以同时读取数据,但是不允许其他事务对该数据进行修改。这可以确保在并发读取数据的情况下,数据的一致性和完整性得到保证。

需要注意的是,具体的锁定语法和参数可能因数据库系统而有所不同,所以在实际开发中,请根据使用的数据库系统的文档或官方指南来确定正确的锁定语法和选项。

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

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

相关文章

微信小程序-授权登录(手机号码)

1、WXBizDataCrypt.js-下载地址 2、UNIAPP代码 <template> <view class"work-container"> <view class"login"> <view class"content"> <button class"button_wx&q…

图论08-图的建模-状态的表达与理解 - 倒水问题为例

文章目录 状态的表达例题1题解1 终止条件&#xff1a;有一个数位为42 状态的改变&#xff1a;a表示十位数&#xff0c;b表示个位数3 其他设置 例题2 力扣773 滑动谜题JavaC 状态的表达 例题1 从初始的(x&#xff0c;y)状态&#xff0c;到最后变成&#xff08;4&#xff0c;&am…

乌班图 Linux 系统 Ubuntu 23.10.1 发布更新镜像

Ubuntu 团队在其官网上发布了Ubuntu 23.10.1 版本,这是目前较新的 Ubuntu 23.10(Focal Fossa)操作系统系列的第一个发行版,旨在为社区提供最新的安装媒体。Ubuntu 22.04 LTS(Focal Fossa)操作系统系列于 2022 年 4 月 21 日发布。 Ubuntu 23.10 LTS(长期支持版本)可用…

Android Studio中配置Git

安装Git 在安装Android Studio之前&#xff0c;需要先安装Git。可以从Git官网下载并安装Git&#xff1a;https://git-scm.com/downloads 在Android Studio中配置Git 在Android Studio中&#xff0c;依次点击“File” -> “Settings”&#xff0c;在弹出的窗口中选择“Ver…

el-table表格设置——动态修改表头

(1) 首先是form表单写表单设置按钮&#xff1a; &#xff08;1.1&#xff09;使用el-popover&#xff0c;你需要修改的是this.colOptions&#xff0c;colSelect: <el-popover id"popover" popper-class"planProver" placement"bottom" width&…

推荐彩虹知识商城源码

彩虹知识商城7.0.3小森升级版新增供货商开心学习版&#xff0c;新增邮件提醒功能&#xff0c;支持给用户发订单、结算等邮件通知&#xff0c;支持给管理员发送提现、域名审核等邮件通知&#xff0c;支持设置手续费最低扣除金额&#xff0c;修复了其他一些已知问题。 演示地址&…

基于深度学习的目标检测算法 计算机竞赛

文章目录 1 简介2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 1 简介 &#x1f5…

HTML脚本、字符实体、URL

HTML脚本&#xff1a; JavaScript 使 HTML 页面具有更强的动态和交互性。 <script> 标签用于定义客户端脚本&#xff0c;比如 JavaScript。<script> 元素既可包含脚本语句&#xff0c;也可通过 src 属性指向外部脚本文件。 JavaScript 最常用于图片操作、表单验…

Python+Selenium自动化测试框架详解

什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE&#xff1a;Firefox的…

智能政务,办事更轻松!拓世法宝AI智慧政务数字人一体机,重新定义你的政务办理体验!

在构建现代化的政务服务体系中&#xff0c;高效、便捷是最重要的衡量标准。随着信息化技术的发展&#xff0c;很多政务服务已经实现了重要的线上办理&#xff0c;减轻了公民和企业的办事负担&#xff0c;同时也提升了政府部门的服务效率。可是&#xff0c;一些场景下的办事流程…

安全第一!速卖通测评补单稳定的系统注意事项大盘点

对新卖家而言&#xff0c;测评并非可耻之事&#xff0c;反而是无法起步、耗费自身时间才是真正的可耻。由于速卖通新店几乎无法获得任何活动的支持&#xff0c;流量也基本没有&#xff0c;因此要在90天内达成60单的业绩对于许多卖家来说都是一项挑战。因此&#xff0c;通过快速…

天津优选Java培训机构 影响Java培训费用的因素

Java作为如今流行的计算机编程语言&#xff0c;其优势在于言语简略、面向对象&#xff0c;并且应用广泛。随着市场对于Java开发人员的需求越来越大&#xff0c;越来越多非本专业的人也通过培训转行进入IT行业。 Java的就业优势 市场需求大&#xff1a;Java人才的市场需求很大…