当前位置: 首页 > article >正文

SQLServer事务

一.事务

1.概念与意义

我们需要在SQLServer中将一系列操作同时进行,在进行的过程中必须要保证这一系列操作全部成功,否则就相当于是全部失败,不可能出现一部分操作成功,一部分操作失败的情况,这样的一系列操作就是事务

那么事务的作用是什么呢?在事务的这一系列操作中,如果第一个操作就失败,那么后面的操作即使成功也没有了意义,或者说那是错误混乱的数据,例如:

小明拥有五个苹果,他想要拿出八个苹果(不得小于八个苹果,否则分享失败)与朋友分享,同时他会写下日记记录与朋友分享的这件事,在这里,事务中只有两项操作,一是拿出八个苹果与朋友分享,二是写下日记,可是问题是小明只拥有五个苹果,他根本没办法完成分享八个苹果的操作,但是要是第一个分享苹果的操作失败,第二个写日记记录与朋友分享苹果的操作又成功了,这不是造假了吗?

所以,在事务中的一系列操作的关系是一荣俱荣一损俱损的

2.案例

在开始之前我们需要知道一个事务的开始需要用

begin tansaction作为开头

同时,在其中会自动定义一个全局变量为@@ERROR,其中存储的数据类型为int,存储的数据表示的是出错的代码编号,我们常用这一特性检测代码是否出错

比如:

declare @E int = 0 
--代码段1
set @E = @E + @@ERROR --检测代码段一是否报错
--代码段2
set @E = @E + @@ERROR --检测代码段二是否报错
print @E

例如:

小明有五个苹果,他想凑齐八个苹果与朋友分享,并将支出记录下来(使用check约束保证账户余额必须大于等于0)

begin transaction 
update People set Apple = Apple - 8 where Id = '001'--Pepple表中的Apple苹果个数 
insert into Record(Id,Rest,Give,ChangeTime)--Record获得与支出的记录,Rest剩余苹果个数,Give给出苹果个数,ChangeTime苹果个数改变时间 
values('001',5,8,GETDATE()) 
set @E = @E + @@ERROR 
if @E = 0 
    begin 
        commit transaction 
        print '操作成功'
    end
else
    begin 
        rollback transaction 
        print '操作失败'
    end

注意点:我们使用了if,else判断语句对代码是否报错进行判断,如果判断是没有报错那么就commit transaction,对其执行,并留下相应的记录,但是如果报错,这一系列事务中就有问题,那么就将rollback transaction,将其抛回,并不执行,也不会留下记录


http://www.kler.cn/news/304901.html

相关文章:

  • QT::QComboBox自定义左击事件信号
  • 使用豆包MarsCode编程助手提升开发效率的实战分享!
  • 算法-最少箭引爆气球(贪心+区间)
  • oracle停止当前运行的JOB或kill会话
  • Python图像处理——计算机视觉中常用的图像预处理
  • Conda新建虚拟环境,安装包一直失败:000和404错误
  • RabbitMQ 基础入门
  • 【python爬虫】之scrapy框架介绍
  • yolo自动化项目实例解析(一)日志格式输出、并发异步多线程、websocket、循环截图、yolo推理、3d寻路
  • 一天认识一个硬件之光纤
  • flink中chainWith() 的详解
  • 【Prompt Engineering:自我一致性、生成知识提示、链式提示】
  • Qt之OpenCv 灰度处理、均值滤波、边缘检测学习
  • 端口大全说明,HTTP,TCP,UDP常见端口对照表
  • Go语言现代web开发07 map字典
  • Eclipse 悬浮提示:提高编程效率的利器
  • Android NDK工具
  • BFS迷宫最小路径问题
  • 【人工智能】OpenAI发布GPT-o1模型:推理能力的革命性突破,这将再次刷新编程领域的格局!
  • 二叉树(上)
  • 定时中断键盘灯闪烁
  • P2865 [USACO06NOV] Roadblocks G
  • C#使用TCP-S7协议读写西门子PLC(五)-测试程序
  • 【玩转贪心算法专题】452. 用最少数量的箭引爆气球是【中等】
  • Java中重写和重载
  • c++ 编辑器 和 编译器 的详细解释
  • Ubuntu20-xrdp与Windows-mstsc远程桌面连接
  • C语言-整数和浮点数在内存中的存储-详解-上
  • JavaEE:文件内容操作(一)
  • docker--刚开始学不知道如何操作拉取,或拉取失败(cmd)