事务全攻略

cmw500 lte非信令测试_WiFi信令测试在研发过程中的作用   1、关于信令测试的故事  2016年的某天,某著名网络产品公司技术负责人致电寻求技术支持:我们的无线路由器遇到了一个困惑:我们某款路由器应用于实际WiFi网络中时,WiFi终端接入非常困难。但是我们使用测试工具检测此路由器,它的所有物理射频指标都非常优异。不知道是为什么?  我来到了测试现场看到:WiFi路由器受控于芯片公司的测试工具,其WiFi发射机指标在非信令测试仪上显示:无论功率、EVM... 阅读详情

一   事务的属性  
   
  事务具有ACID属性  
  即   Atomic原子性,   Consistent一致性,   Isolated隔离性,   Durable永久性  
   
  原子性  
       
        就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全  
  回滚,全部不保留  
   
   
  一致性  
        事务完成或者撤销后,都应该处于一致的状态  
   
  隔离性  
   
        多个事务同时进行,它们之间应该互不干扰.应该防止一个事务处理其他事务也要修改的数据时,  
  不合理的存取和不完整的读取数据  
   
   
  永久性  
        事务提交以后,所做的工作就被永久的保存下来  
   
   
  二   事务并发处理会产生的问题    
   
  丢失更新  
   
          当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题、  
  每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。  
   
  脏读  
            当第二个事务选择其它事务正在更新的行时,会发生未确认的相关性问题。  
            第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改。  
   
  不可重复读  
   
            当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。  
            不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。  
            然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。  
   
  幻像读  
   
              当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻像读问题。  
              事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其它事务删除。同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中。  
   
   
  三   事务处理类型  
   
   
  自动处理事务  
   
        系统默认每个T-SQL命令都是事务处理     由系统自动开始并提交  
   
   
  隐式事务  
   
          当有大量的DDL   和DML命令执行时会自动开始,并一直保持到用户明确提交为止,切换隐式事务可以用SET   IMPLICIT_TRANSACTIONS  
          为连接设置隐性事务模式.当设置为   ON   时,SET   IMPLICIT_TRANSACTIONS   将连接设置为隐性事务模式。当设置为   OFF   时,则使连接返回到自动提交事务模式  
   
   
  用户定义事务  
   
            由用户来控制事务的开始和结束     命令有:   begin   tran   commit   tran     rollback   tran   命令  
   
   
  分布式事务  
            跨越多个服务器的事务称为分布式事务,sql   server   可以由DTc   microsoft   distributed   transaction   coordinator  
            来支持处理分布式事务,可以使用   BEgin   distributed   transaction   命令启动一个分布式事务处理  
   
   
   
  四     事务处理的隔离级别  
   
  使用SET   TRANSACTION   ISOLATION   LEVEL来控制由连接发出的所有语句的默认事务锁定行为  
   
  从低到高依次是  
   
   
  READ   UNCOMMITTED  
   
  执行脏读或   0   级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置   NOLOCK   相同。这是四个隔离级别中限制最小的级别。  
   
  举例  
   
  设table1(A,B,C)  
  A         B         C  
  a1       b1       c1  
  a2       b2       c2  
  a3       b3       c3  
   
  新建两个连接  
  在第一个连接中执行以下语句  
  select   *   from   table1  
  begin   tran  
  update   table1   set   c='c'  
  select   *   from   table1  
  waitfor   delay   '00:00:10'     --等待10秒  
  rollback   tran  
  select   *   from   table1  
   
  在第二个连接中执行以下语句  
  SET   TRANSACTION   ISOLATION   LEVEL   READ   UNCOMMITTED  
  print   '脏读'  
  select   *   from   table1  
  if   @@rowcount>0  
  begin  
    waitfor   delay   '00:00:10'    
    print   '不重复读'  
    select   *   from   table1  
  end  
   
  第二个连接的结果  
   
  脏读  
  A         B         C  
  a1       b1       c  
  a2       b2       c  
  a3       b3       c  
   
  '不重复读'  
  A         B         C  
  a1       b1       c1  
  a2       b2       c2  
  a3       b3       c3  
   
   
   
  READ   COMMITTED  
   
  指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是   SQL   Server   的默认值。  
   
   
  在第一个连接中执行以下语句  
  SET   TRANSACTION   ISOLATION   LEVEL   READ   COMMITTED  
  begin   tran  
  print   '初始'  
  select   *   from   table1  
  waitfor   delay   '00:00:10'     --等待10秒  
  print   '不重复读'  
  select   *   from   table1  
  rollback   tran  
   
   
  在第二个连接中执行以下语句  
  SET   TRANSACTION   ISOLATION   LEVEL   READ   COMMITTED  
   
  update   table1   set   c='c'  
       
   
  第一个连接的结果  
   
  初始  
  A         B         C  
  a1       b1       c1  
  a2       b2       c2  
  a3       b3       c3  
   
  不重复读  
  A         B         C  
  a1       b1       c  
  a2       b2       c  
  a3       b3       c  
   
   
   
  REPEATABLE   READ  
   
  锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。  
   
   
  在第一个连接中执行以下语句  
  SET   TRANSACTION   ISOLATION   LEVEL   REPEATABLE   READ  
  begin   tran  
  print   '初始'  
  select   *   from   table1  
  waitfor   delay   '00:00:10'     --等待10秒  
  print   '幻像读'  
  select   *   from   table1  
  rollback   tran  
   
   
  在第二个连接中执行以下语句  
  SET   TRANSACTION   ISOLATION   LEVEL   REPEATABLE   READ  
  insert     table1   select   'a4','b4','c4'  
   
   
  第一个连接的结果  
   
  初始  
  A         B         C  
  a1       b1       c1  
  a2       b2       c2  
  a3       b3       c3  
   
  幻像读  
  A         B         C  
  a1       b1       c1  
  a2       b2       c2  
  a3       b3       c3  
  a4       b4       c4  
   
   
  SERIALIZABLE  
   
  在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有   SELECT   语句中的所有表上设置   HOLDLOCK   相同。  
   
   
  在第一个连接中执行以下语句  
  SET   TRANSACTION   ISOLATION   LEVEL   SERIALIZABLE  
  begin   tran  
  print   '初始'  
  select   *   from   table1  
  waitfor   delay   '00:00:10'     --等待10秒  
  print   '没有变化'  
  select   *   from   table1  
  rollback   tran  
   
   
  在第二个连接中执行以下语句  
  SET   TRANSACTION   ISOLATION   LEVEL   SERIALIZABLE  
  insert     table1   select   'a4','b4','c4'  
   
   
  第一个连接的结果  
   
  初始  
  A         B         C  
  a1       b1       c1  
  a2       b2       c2  
  a3       b3       c3  
   
  没有变化  
  A         B         C  
  a1       b1       c1  
  a2       b2       c2  
  a3       b3       c3  
   
   
  五   事务处理嵌套的语法和对@@TRANCOUNT的影响  
   
  BEGIN   TRAN     @@TRANCOUNT+1  
  COMMIT   TRAN   @@TRANCOUNT-1  
  ROLLBACK   TRAN   使@@TRANCOUNT回归0  
  SAVE   TRAN   不影响@@TRANCOUNT  
   
  举例  
  1)  
   
  SELECT   '事务处理前',   @@TRANCOUNT             --值为   0  
  BEGIN   TRAN  
      SELECT   '第一个事务',   @@TRANCOUNT         --值为   1  
          SELECT   *   FROM   table1  
          BEGIN   TRAN    
                SELECT   '第二个事务',   @@TRANCOUNT     --值为   2  
                    DELETE   table1  
          COMMIT   TRAN  
          SELECT   '递交第二个事务',   @@TRANCOUNT   --值为   1  
  ROLLBACK   TRAN  
  SELECT   '回滚第一个事务',   @@TRANCOUNT   --值为   0  
   
   
  2)  
  SELECT   '事务处理前',   @@TRANCOUNT             --值为   0  
  BEGIN   TRAN    
      SELECT   '第一个事务',   @@TRANCOUNT         --值为   1  
          SELECT   *   FROM   table1  
      SAVE   TRAN   t1  
      SELECT   '保存第一个事务后',   @@TRANCOUNT   --值为   1    
          BEGIN   TRAN    
                SELECT   '第二个事务',   @@TRANCOUNT     --值为   2  
                    DELETE   table1  
        ROLLBACK   TRAN   t1  
          SELECT   '回滚到保存点t1',   @@TRANCOUNT   --注意这里的值为   2    
  IF   @@TRANCOUNT>0  
  ROLLBACK   TRAN  
  SELECT   '处理结束',   @@TRANCOUNT   --为   0  
   
   
  SET   XACT_ABORT  
  控制语句产生运行时错误时,是否自动回滚当前事务  
   
  比如  
   
  SET   XACT_ABORT   ON  
  BEGIN   TRAN  
      SELECT   *   FROM   一个不存在的表  
  ROLL   BACKTRAN  
  PRINT   '处理完毕'     --执行结果没有到这一步  
  go  
  SELECT   @@TRANCOUNT     --值为1   产生孤立事务  
   
   
  六   事务调试语句  
  DBCC   OPENTRAN  
   
  如果在指定数据库内存在最旧的活动事务和最旧的分布和非分布式复制事务,则显示与之相关的信息  
  示例  
  下例获得当前数据库和   pubs   数据库的事务信息。  
   
  --   Display   transaction   information   only   for   the   current   database.  
  DBCC   OPENTRAN  
  GO  
  --   Display   transaction   information   for   the   pubs   database.  
  DBCC   OPENTRAN('pubs')  
  GO  


--------------------------------------------------------------------------------------------------------------------------------------------------------

 

全接触SQL异常与孤立事务!

一、首先从SQLServer中Error讲起,SQL中错误处理有些怪辟   错误级别同是16但结果都不同。  
   
      select   *   from   一个不在的表  
      if   @@error<>0  
          print   '这个没有输出'  
      go  
   
      raiserror('',16,3)  
      if   @@error<>0  
          print   '这个输出了'  
      go  
   
      exec('select   *   from   一个不在的表')  
      if   @@error<>0  
          print   '这个输出了'  
      go  
   
      exec   sp_executesql   N'select   *   from   一个不在的表'  
      if   @@error<>0  
          print   '这个输出了'  
   
  这样你可以发现通过exec或sp_executesql执行可疑的sql,这样就可以在后面捕捉到被异常终止的错误。  
   
   
  二、引出孤立事务:  
      1、孤立事务的产生  
   
          select   @@trancount   当前连接的活动事务数   --当前连接的活动事务数为0  
   
          begin   tran  
   
          select   *   from   一个不在的表  
          if   @@error<>0  
          begin  
              print   '没有执行到这里来!'  
              if   @@trancount<>0   rollback   tran  
          end  
   
          commit   tran  
   
          select   @@trancount   当前连接的活动事务数     --执行后你看看   当前连接的活动事务数为1,且重复执行会每次累加,这是很耗资源的。  
   
      应为rollback根本就没有被回滚。  
   
      2、使用现有手段解决孤立事务  
   
   
          print   @@trancount   print   '当前连接的活动事务数'   --当前连接的活动事务数为0  
   
          if   @@trancount<>0   rollback   tran   --在这里写可以让孤立事务只保持到下次你的过程被调用  
          begin   tran  
   
          select   *   from   一个不在的表  
          if   @@error<>0  
          begin  
              print   '没有执行到这里来!'  
              if   @@trancount<>0   rollback   tran  
          end  
   
          commit   tran  
   
          ---执行后你看看   当前连接的活动事务数为1,但重复执行不会累加  
          print   @@trancount   print   '当前连接的活动事务数'  
   
  三、使用   set   xact_abort   来控制部分违反约束的错误的执行过程  
   
      create   table   Table1   (a   int   check(a>100))  
      go  
   
      set   xact_abort   on  
      begin   tran  
          insert   table1   values(10)  
          print   '这里没有被执行'  
      commit   tran  
      go  
       
      print   ''   print   '=============================================='   print   ''  
       
      set   xact_abort   off  
      begin   tran  
          insert   table1   values(10)  
          print   '这里被执行'  
      commit   tran  
   
      go  
      drop   table   table1  
   
  但   set   xact_abort   对于编译产生的错误确没有起作用,且同样会产生孤立事务  
   
      set   xact_abort   on  
      begin   tran  
          insert     一个不在的表   values(10)  
          print   '这里没有被执行'  
      commit   tran  
      go  
   
      print   ''   print   '=============================================='   print   ''  
   
      set   xact_abort   off  
      begin   tran  
          insert     一个不在的表   values(10)  
          print   '这里没有被执行'  
      commit   tran  
      go  
   
      select   @@trancount   当前连接的活动事务数   ---有两个孤立事务  
      if   @@trancount<>0   rollback   tran  
   
   
  对于sql中怪辟的各种错误,和孤立事务在t-sql编程中一定要注意,小心孤立事务的陷阱,尽量避免浪费或孤立资源,Microsoft公开宣布过SQLServe下一版本Yukon将有内置异常处理语法。那时可以通过代码对无法预料的错误有更好的控制。  

YOLOv8改进 | 特殊场景检测篇 | 最新的多尺度特征提取DICAM(全网独家首发,增强水下图像的质量) 本文给大家带来的最新改进机制是多尺度特征提取和通道注意力机制DICAM,深度Inception和通道注意力模块(DICAM)主要用于用于增强水下图像的质量、对比度和色偏。所提出的DICAM模型考虑了水下图像的比例退化和不均匀色偏,从而提高图像的质量。通过在两个公开的水下图像增强数据集上的广泛实验,验证了提出的模型在全参考和无参考图像质量评估指标方面。欢迎大家订阅我的专栏一起学习YOLO,购买专栏读者联系读者入群获取进阶项目文件! 阅读详情

相关推荐

LabVIEW+数据库应用系列保姆级教程,第一篇数据库连接

目录LabVIEW连接数据库的方法连接MySQL连接Oracle,SQL Server,Access等 LabVIEW连接数据库的方法 1、创建udl(Universal Data Link)是通用数据连接文件。界面操作,简单快捷。 2、编写连接字符串。需要熟悉连接字符串的结构,容易出错。 3、其他… 本教程教你使用第1种方法,也是最简单、最常用的方法。 连接MySQL 1、在MySQL Installer内安装MySQL Connector/ODBC,建议安装32位(X86),如下图: 2、创建ODBC

wwplh5520370的博客 1万+

sqlserver事务详解

本文主要讲述sqlserver 事务特性

qq_44995761的博客 1848

从“储能”到“信号”:拆解Buck电路中那颗不起眼的前馈电容,如何让电源更稳

本文深入解析Buck电路中前馈电容的关键作用,揭示其如何通过频域整形和零点补偿提升电源稳定性。从工作原理到工程实践,详细介绍了容值计算、布局布线及特殊场景调校策略,帮助工程师优化瞬态响应和纹波抑制。

weixin_42530458的博客 403

SQL事务全攻略

SQL事务全攻略 一 事务的属性 事务具有ACID属性 即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性 原子性        就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全 回滚,全部不保留 一致性     事务完成或者撤销后,都应该处于

MrWang 870

ArcGIS基础:点要素分割线要素和提取线要素的交点

第一个实验:【点要素分割线要素】看下原始数据:下图所示,2个红点和一条绿线,用2个点去分割这条线。 找到【数据管理工具】,在找到【要素】,再找到【在点处分割线】,如下图所示。 输入线、点要素,然后在【搜索半径】里输入5米,查看一下结果。 查看结果发现,线段被分割了2段,我们查看一下原因。 发现第2个点与线有一段距离,肯定是大于5米的,所以分割没有成功。可以量测一下距离,重新输入搜索半径。 我们把搜索半径改为200米,勘察结果,被点分割了3段。 接下来使用另外一个工具【在折点处分割线】,如下所示。

yuanYW7556的博客 1万+

使用 DEM 模拟金属烧结过程

了解离散元素法 (DEM) 如何彻底改变烧结工艺,提高制造业的效率和精度。

jkh920184196的博客 1125

sql 事务 全攻略

一 事务的属性事务具有ACID属性即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性原子性就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全回滚,全部不保留一致性事务完成或者撤销后,都应该处于一致的状态隔离性多个事务同时进行,它们之间应该互不干扰.应该防止一个事务处理其他事务也要修改...

atg0518的博客 153

Unity 2022.3.3 LTS + Visual Studio 2022:手把手教你复刻《吸血鬼幸存者》核心战斗(附完整项目源码)

本文详细介绍了如何使用Unity 2022.3.3 LTS和Visual Studio 2022从零构建《吸血鬼幸存者》式战斗系统。通过图文开发教程,涵盖对象池优化、ECS架构雏形、2D物理碰撞控制等关键技术,帮助开发者高效复刻这款热门游戏的自动攻击与海量刷怪机制。

weixin_30721077的博客 458

事务全攻略[转]

关于事务一事务的属性事务具有ACID属性:即Atomic原子性,Consistent一致性,Isolated隔离性,Durable永久性1,原子性:就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全回滚,全部不保留2,一致性:事务完成或者撤销后,都应该处于一致的状态3,隔离性:...

anhai6033的博客 133

【主力资金密码】副图指标升级版使用技术图文案例分解,通达信软件炒股指标公式代码

(1)主力资金线在低位时,对应的副图指标显示柱线是绿色,这个阶段主力资金参与小,行情处于下跌趋势或弱势震荡。当然,如果结合主图指标【翻倍密码系统】操作,主图的两个买卖点以及K线均线变色跟踪功能,更多的技术支撑,多空更加清晰,共振做多或多头更加确定和安全。如上图标记,中档虚线是参考安全操作的一个区间划分,粉色阶段做多或持股为主,为操作增加一道安全保护。如上图,副图指标【主力资金密码】更新叠加操作区间背景,绿色阶段持币或做空,粉色阶段做多或持股。如上图,副图指标,标记的两个区间,绿色区间时做空或持币。

weixin_69760830的博客 2551

2025国赛数学建模A题 完整Python代码 烟幕干扰弹的投放策略

常量定义G = 9.8 # 重力加速度 m/s²V_SMOKE_SINK = 3 # 烟幕下沉速度 m/sMISSILE_SPEED = 300 # 导弹速度 m/sEFFECTIVE_RADIUS = 10 # 有效遮蔽半径 mEFFECTIVE_DURATION = 20 # 有效遮蔽时间 sTARGET_POS = np.array([0, 200, 0]) # 目标位置FALSE_TARGET_POS = np.array([0, 0, 0]) # 假目标位置# 初始位置。

YOLO 1106

MySQL InnoDB【事务模型】之【事务隔离级别】 全攻略

快速了解MySQL InnoDB引擎 事务模型之事务隔离级别

编程探索与数字构建 | Python与Java之旅 1182

【Autosar COM】Marvell 88Q5050 以太网交换机驱动技术解析

本驱动实现了对Marvell 88Q5050交换机的全面控制,通过模块化设计满足AUTOSAR规范要求。增加DMA加速机制提升大数据量处理性能实现TSN(时间敏感网络)特性支持引入异步通知机制替代轮询操作增强安全特性,如MACsec支持该驱动架构为车载以太网交换机控制提供了可靠基础,其设计思想可推广到其他车载网络控制器开发中。随着车载网络技术的演进,驱动需持续迭代以支持新特性与更高通信速率需求。

1450

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: C# 获得当前的路径
下一篇: ASCII字符表
cg_program
博客等级 码龄19年 245粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值