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

news2025/1/14 0:42:50

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

目录

  • 一、事务四个特性
    • 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.coloradmin.cn/o/1166799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Eolink Apikit 如何对所有 API 异常请求实时监控 ?

API 监控适合业务在互联网上,并且用户来自多个不同的地区,且对API的要求较高的场合,用于解决以下的问题: 发现由于网络中断或者是API响应异常等导致的服务不可用 及时对异常的API进行告警 记录监控的日志,方便排查 …

基于Jaccard相似度的推荐算法---示例

目录 数据展示推荐算法的分类基于相似度基于流行度/上下文/社交网络 Jaccard相似度分析数据的特点可以考虑的方法计算方法优缺点计算用户之间的Jaccard相似度获取与给定最相似的10个用户对1713353的用户推荐10本书 数据展示 import pandas as pd import numpy as np# 读取CSV文…

vue+elementUI 设置el-descriptions固定长度并对齐

问题描述 对于elementUI组件&#xff0c;el-descriptions 在以类似列表的形式排列的时候&#xff0c;上下无法对齐的问题。 问题解决 在el-descriptions 标签中&#xff0c;添加属性&#xff1a; :contentStyle"content_style" 控制其内容栏长度 <el-descripti…

Visual Components Robotics OLP解决方案 北京衡祖

Visual Components 引入了“Visual Components Robotics OLP”的重大升级&#xff0c;合并了制造模拟和机器人离线编程。该解决方案利用 Delfoi Robotics 的技术&#xff0c;提高生产率、减少停机时间并减少浪费。 一、探索下一代离线机器人编程软件 自 1999 年以来&#xff0…

强大的pdf编辑软件:Acrobat Pro DC 2023中文

Acrobat Pro DC 2023是一款强大的PDF编辑和管理软件&#xff0c;它提供了广泛的功能&#xff0c;使用户能够轻松创建、编辑、转换和共享PDF文档。通过直观的界面和先进的工具&#xff0c;用户可以快速进行文本编辑、图像调整、页面管理等操作&#xff0c;同时支持OCR技术&#…

MobPush自定义智能标签,赋能精细化运营

随着用户兴趣爱好日益多元化&#xff0c;如何精准把握用户喜好&#xff0c;向用户定制推送用户所喜好的内容&#xff0c;成为APP能否提升用户粘性和活跃度&#xff0c;形成竞争力的关键。 因此&#xff0c;MobPush此前全面上新了”智能标签“功能&#xff0c;成为无数APP运营者…

图形化ping工具gping

一、介绍 gping能够以折线图的方式&#xff0c;实时展示 ping 的结果&#xff0c;支持 Windows、Linux 和 macOS 操作系统。并且支持多个目标同时Ping同时展示折线图方便对比。下面扩展一下ICMP及ICMP隧道。 ICMP消息结构&#xff1a; ICMP消息是由一个类型字段、一个代码字段、…

数据结构——顺序表(SeqList)

目录 1. 顺序表介绍 2. 顺序表工程 2.1 顺序表定义 2.1.1 静态顺序表 2.1.2 动态顺序表 2.2顺序表接口 2.2.1 顺序表初始化 2.2.2 顺序表打印 2.2.3 顺序表销毁 2.2.4 顺序表数据插入 2.2.4.1 容量检查 2.2.4.2 顺序表尾插 2.2.4.3 顺序表头插 2.2.4.4 顺序表随机…

Vue Vuex的使用和原理 专门解决共享数据的问题

Vuex专门解决共享数据的问题 多组件共享时使用&#xff0c;如用户ID各组件需要根据ID发送请求获取数据&#xff0c;任意组件可以进行增删改&#xff0c;相当于全局变量 Vuex 工作流程 如果确定值参数可以不经过Actions 直接走 安装Vuex vue2使用 vuex3 vue3使用 vuex4 npm i…

服务Service

一、服务概述 Service(服务)是Android四大组件之一&#xff0c;是能够在后台长时间执行操作并且不是供用户界面的应用程序组件。Senice可以与其他组件进行交互&#xff0c;一般由Activity启动&#xff0c;但是并不依赖于Activity。当Activity的生命周期结束时&#xff0c;Serv…

UNI-APP_ios自动适应底部安全区背景,修改安全区背景

自动适应&#xff08;推荐&#xff09; 将所有 iPhone X&#xff08;刘海屏) 底部安全区域背景颜色 自动适应&#xff0c;当前页面什么颜色会自动调整。 1.打开 manifest.json &#xff0c;打开源码视图 2.找到 app-plus 配置项&#xff0c;添加以下代码 "safearea&quo…

vue的message提示信息修改提示框所在页面位置高度

vue的message提示信息修改提示框所在页面位置高度&#xff0c;可以使用message的offset属性通过数值来改变提示框位置&#xff01; html部分代码 <div><el-button type"primary" click"showMessage" style"margin-left:40%;margin-top:1%&q…

Python多线程和代理请求示例

这是一个python多线程调用和代理提交的示例 可以用于负载均衡测试和高并发测试 import hashlib import json import random import sys import threading import time import requests as requests from requests.packages.urllib3.exceptions import InsecureRequestWarningr…

windows jar包文件默认打开方式设置

1、管理员权限打开“注册表编辑器”&#xff1b; 2、定位到计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts项下&#xff0c;找到.jar项&#xff0c;再选中UserChoice项&#xff0c;其中ProgId值为jarfile 3、定位到计算机\HKEY_CLAS…

Pixhawk2.4.8接口及引脚定义

pixhawk2.4.8实物图 pixhawk侧边信号线插口 遥控器接收机、电调信号线插在这里 pixhawk侧边功能口 Micro-USB接口用来烧录固件、SD卡中有飞行日志等信息 pixhawk主面板接口 主面板接口功能概览 主面板接口定义 参考博客&#xff1a; https://zhuanlan.zhihu.com/p/61106155…

分布式训练原理总结(DP、PP、TP 、ZeRO)

文章目录 一、分布式训练基础知识1.1 集合通信、集合通信库1.2 通信模式1.2.1 Parameter Server&#xff08;2014&#xff09;1.2.2 Ring-AllReduce&#xff08;2017&#xff09; 1.3 同步范式1.4 大模型训练的目标公式 二、数据并行2.1 DataParallel&#xff08;DP)2.2 Distri…

c++学习3——几个感悟

一些感悟 1 虚拟目录2 浏览器和微信的本质区别3 资源文件 1 虚拟目录 电脑文件中并没有这个目录&#xff0c;比如vs2019在编程时&#xff0c; c的头文件.h文件和源文件.cpp文件实际上在一个目录&#xff0c;但是在vs2019中前者显示在头文件文件夹中&#xff0c;后者显示在源文…

mybatis-plus技巧--动态表名-多语句-拼接sql--关于mybatis的mysql分页查询总数的优化思考

文章目录 动态表名xml表名填充表名拦截器每天按统计每次设置 多语句操作forEach动态拼接 参数构建java进行拼接sqlmysql分页查询总数count不要使用count&#xff08;常数&#xff09;&#xff0c;count&#xff08;列名&#xff09;代替count(*)自己计数 SQL_CALC_FOUND_ROWSxm…

左偏树学习笔记

定义 堆&#xff0c;是一棵树&#xff0c;且每个节点的键值都大于等于 / 小于其父亲的键值。 左偏树是一种可合并的堆&#xff0c;可以以 O ( log ⁡ n ) O(\log n) O(logn) 的复杂度实现合并。 性质 左偏树满足堆的性质。 我们设定一个值 dist \text{dist} dist&#xf…

学习笔记|配对设计卡方检验|配对及二分类变量|McNemar检验|规范表达|《小白爱上SPSS》课程:SPSS第十七讲 | 配对设计卡方检验怎么做?

目录 学习目的软件版本原始文档配对设计卡方检验一、实战案例读数据 二、统计策略三、SPSS操作四、结果解读第一&#xff0c;卡方检验结果第二&#xff0c;分析统计结果 五、规范报告1、规范表格2、规范文字 学习目的 SPSS第十七讲 | 配对设计卡方检验怎么做&#xff1f; 软件…