事务的概念-事务的概念、事务的定义(BEGIN TRANSACTION、COMMIT、ROLLBACK)

数据库系统中的事务,是保证系统在发生故障后或存在并发操作的情况下,数据库中的数据与企业业务结果相一致

一、事务的概念

在许多数据库应用系统中,数据库用来存储现实世界中一些企业的状态信息其管理的数据

1、概念一

(1)事务就是为了维护企业状态与数据库状态相一致的与数据库交互的程序 

(2)举例

比如银行信息管理系统中的转账事务就是为了反应银行客户的账户间的资金变化,更新数据库中的账户信息,最终使得转账后的数据库中的当前数据,即数据库状态,与银行的账户情况一致

 2、概念二

(1)事务不是一种普通的程序,事务是一组需要一起执行的操作序列,是数据库系统中的逻辑工作单元。

所谓逻辑工作单元,指的是从用户的角度看,事务是数据库系统中执行的最小程序段

3、概念三

(1)对于关系型数据库,事务程序中包含的操作,可以是一条SQL语句、一组SQL语句或一个应用程序段。

在没有显示定义一个事务的情况下,系统默认每个SQL语句就是一个事务

(2)所以如果不把账户A转账1000元到账户B的操作设计的两个更新语句定义在一个事务中,转账操作中的这两个更新语句就是两个事务。那么如何把转账操作涉及的两个数据库更新语句定义为一个转账事务呢?

二、事务的定义

1、用BEGIN TRANSACTION来标记事务的开始

2、然后是事务所包含的SQL语句或程序段

3、最后以两种方式结束事务

(1)一种是以COMMIT语句提交事务,表示事务中的所有操作语句均已执行,其中对数据库的更新操作结果应写到磁盘中的物理数据库中去,数据库进入一个新的状态

(2)事务的另一中结束方式是以ROLLBACK语句回滚事务,该语句的执行表示事务执行的过程中发生了某种故障,事务夭折(abort)不能继续执行,事务夭折前所有已完成的对数据库的更新操作结果应该撤销,使数据库恢复到该事务执行前的数据库状态

 三、事务举例:COMMIT和ROLLBACK的用法

1、把从账户A转账1000元到账户B的转账操作定义为一个事务,并对该事务以COMMIT和ROLLBACK两种不同的方式结束,看一下事务执行后的数据库结果

(1)创建ACCOUNTS表

create table accounts(
acctNo char(20) primary key,
balance float,
check(balance>=0)
);

(2)使用ROLLBACK结束事务

begin transaction

select * from accounts;

update accounts
set balance=balance-1000
where acctNo='A';   /* 从账户A中减去1000元*/

update accounts
set balance=balance+1000
where acctNo='B';   /* 从账户B中加上1000元*/

select * from accounts;

rollback

select * from accounts;

以ROLLBACK语句结束事务时,事务结束前转账成功,而事务结束后事务中对数据库的所有更新操作结果被撤销了,数据库中数据的值又恢复到事务开始时的状态

(2)使用COMMIT结束事务

begin transaction

select * from accounts;

update accounts
set balance=balance-1000
where acctNo='A';   /* 从账户A中减去1000元*/

update accounts
set balance=balance+1000
where acctNo='B';   /* 从账户B中加上1000元*/

select * from accounts;

commit

select * from accounts;

而以COMMIT语句结束事务时可看到事务结束后事务中对数据库的所有更新操作结果被保存在数据库中了

四、小结

1、事务时数据库系统中的逻辑工作单元

2、用SQL语言定义事务

  • BEGIN TRANSACTION
  • COMMIT
  • ROLLBACK

因此,在具体的应用过程中,当我们需要将含有多个数据库操作的语句序列或程序作为一个不可分割的整体进行执行时,就需要使用数据库操作语言来定义一个事务。事务的执行结果有两种情况,要么提交,要么回滚

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL3.3_C++_Windows(22)

材质: 决定物体在渲染过程中最终视觉呈现的关键因素之一,它通过一系列光学(投光物)和物理参数(反光度,反照率、金属度,折射率……)准确模拟现实世界中的材料特性,从而增…

MySQL高级-索引-使用规则-单列索引联合索引

文章目录 1、单列索引2、联合索引3、查看表索引4、创建 name 和 phone 索引5、查询 phone17799990010 and name韩信6、执行计划 phone17799990010 and name韩信7、创建联合唯一索引 idx_user_phone_name8、再次执行计划 phone17799990010 and name韩信9、使用了USE INDEX提示来…

echarts/自定义 环形进度条,源码+图片 复制运行 自取

进度图1&#xff1a; <!--* FilePath: index.vue* Author: 是十九呐* Date: 2024-06-26 17:56:34* LastEditTime: 2024-06-27 10:16:20 --> <template><div class"pieChartProgress-container"><div class"pieChartProgress-chart" :…

【Python机器学习】自动化特征选择——基于模型的特征选择

基于模型的特征选择使用一个监督机器学习模型来判断每个特征的重要性&#xff0c;并且仅保留最重要的特征。用于特征学习的监督模型不需要与用于最终建模的模型相同。特征选择模型需要为每个特征提供某种重要性度量&#xff0c;以便用这个度量对特征进行排序。决策树和基于决策…

3D立体卡片动效(附源码)

3D立体卡片动效 欢迎关注&#xff1a;xssy5431 小拾岁月参考链接&#xff1a;https://mp.weixin.qq.com/s/9xEjPAA38pRiIampxjXNKQ 效果展示 思路分析 需求含有立体这种关键词&#xff0c;我们第一反应是采用动画中的平移、倾斜等实现。如果是立体&#xff0c;必然产生阴影&…

哈喽GPT-4o,对GPT-4o 数据分析Data Analysis的思考与看法

目录 上传一个Excel给Data Analysis。Prompt&#xff1a;请问这个数据集是做什么的Prompt&#xff1a;请问书籍的定价如何&#xff0c;请用合适的图表展示它的售价情况Prompt&#xff1a;请统计书名列中出现最多的名称&#xff0c;然后使用词云将其可视化。Prompt&#xff1a;请…

FastGPT部署和OneAPI部署

FastGPT模型管理 FastGPT只支持openai 格式的restful 的api接口。 就是 chat/completion那个接口。如果不理解可以参考这个文章 https://zhuanlan.zhihu.com/p/656959227 。 支持Python 。JAVA 等后端语言或者 http 访问 因此如果想访问大模型&#xff0c;有以下几种方案&…

软件需求管理规程(DOC原件)

软件需求管理规程是确保软件开发过程中需求清晰、一致、可追踪的关键环节&#xff1a; 明确需求&#xff1a;项目初期&#xff0c;与利益相关者明确项目目标和需求&#xff0c;确保需求完整、无歧义。需求评审&#xff1a;组织专家团队对需求进行评审&#xff0c;识别潜在风险和…

C++ 矩阵的最小路径和解法

描述 给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。 数据范围: 1≤𝑛,𝑚≤5001≤n,m≤500,矩阵中任意值都满足 0≤𝑎𝑖,𝑗≤1000≤ai,j​≤100 要求…

Google Earth Engine(GEE)——ui.Label如何添加链接和使用

结果 这个Google的连接可以直接点开 函数: ui.Button(label, onClick, disabled, style) A clickable button with a text label. Arguments: label (String, optional): The buttons label. Defaults to an empty string. onClick (Function, optional): A callbac…

SNAT和DNAT的原理和应用

SNAT和DNAT的原理和应用 一、SNAT&#xff08;源网络地址转换&#xff09; 原理&#xff1a; SNAT&#xff08;Source Network Address Translation&#xff09;是将私有网络内部主机的源IP地址转换为公共IP地址&#xff0c;用于在内部网络中的主机访问外部网络时隐藏内部IP…

隐语课程学习笔记12 - 基于隐语的VisionTransformer框架

主讲老师&#xff1a;曾文轩 学习链接&#xff1a;第12讲&#xff1a;基于隐语的Vision Transformer框架 论文&#xff1a;【ICCV2023】MPCViT: Searching for Accurate and Efficient MPC-Friendly Vision Transformer with Heterogeneous Attention 隐语课程第12课&#xff…

项目测试计划(Word)

1简介 1.1 目的 1.2 范围 2. 测试参考文档和测试提交文档 2.1 测试参考文档 2.2 测试提交文档 3. 测试策略 3.1整体测试策略 3.2功能测试 3.3 界面测试 3.4 性能测试 3.5 安全性测试 3.6 工具 4 测试阶段进入和退出标准 4.1进入标准 4.2退出标准 5 测试范围 5.1需要测试的模块 …

2024/6/28 英语每日一段

The Supreme Court on Thursday rejected a challenge to an obscure provision of President Donald Trump’s 2017 tax package, ending a lawsuit that many experts feared could destabilize the nation’s tax system. In a divided decision, the court upheld a one-ti…

uboot基本使用网络命令和从服务器端下载linux内核启动

网络命令ip地址设置: setenv gmac_debug 0; setenv mdio_intf rgmii; setenv bootdelay 1; setenv ethaddr 00:xxxx:81:70; // mac地址 setenv ipaddr xxx; //开发板 IP 地址 setenv netmask 255.255.255.0; setenv gatewayip xxx.1; setenv serverip xxxx; //服…

如何在LabVIEW中使用FPGA模块

LabVIEW FPGA模块是NI公司推出的一款强大工具&#xff0c;它允许用户使用LabVIEW图形化编程环境来开发FPGA&#xff08;现场可编程门阵列&#xff09;应用程序。与传统的HDL&#xff08;硬件描述语言&#xff09;编程相比&#xff0c;LabVIEW FPGA模块大大简化了FPGA开发的过程…

Ollama qwen2:7b

简介 一个简明易用的本地大模型运行框架&#xff0c;Ollama官网&#xff1a;Ollama ollama命令 ollama有类似docker的命令。下面是一些模型(large language models)的操作命令: ollama list&#xff1a;显示模型列表ollama show&#xff1a;显示模型的信息ollama pull&#…

kafka-高可用设计详解(集群架构、备份机制、消费者组、重平衡)

文章目录 kafka高可用设计集群架构Kafka集群选举ISR与OSRLEO和HWKafka分区Leader选举Leader Replica选举策略Leader Replica选举过程 副本机制(Replication&#xff09;消费者组和再均衡消费者组再均衡(重平衡) 更多相关内容可查看 kafka高可用设计 Apache Kafka 的高可用设计…

第24篇 滑动开关控制LED<二>

Q&#xff1a;如何使用Intel FPGA Monitor Program创建滑动开关控制LED工程并运行呢&#xff1f; A&#xff1a;创建工程的基本过程与前面的Intel FPGA Monitor Program的使用<三>一样&#xff0c;不同的地方是&#xff0c;本实验工程用到了开发板的外设硬件LED和SW&…

[JS]节点操作

DOM节点 DOM树中的所有内容都是节点, 我们重点关注元素节点 作用 使开发者可以根据节点的关系获取元素, 而不是只能依赖选择器, 提高了编码的灵活性 节点分类 元素节点: 所有的标签都是元素节点, html是根节点属性节点: 所有的属性都是属性节点, 比如href文本节点: 所有的文…