SQL 事务(Transaction)「建议收藏」

SQL 事务(Transaction)「建议收藏」1、概念指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行语法步骤:开始事

大家好,又见面了,我是你们的朋友全栈君。

1、概念

指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行
这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行

语法步骤:
开始事务:BEGIN TRANSACTION –开启事务
事务提交:COMMIT TRANSACTION –提交操作
事务回滚:ROLLBACK TRANSACTION –取消操作

 

2、建表

--建表
CREATE TABLE [Person](
[PersonId]    NVARCHAR(100) PRIMARY KEY ,        ---主键
[PersonName] NVARCHAR(100) NULL
)

 

 

3、事务

/* 如果只有Begin TransAction和Commit TransAction 就算报错了,也是不会回滚的 Select * From Person */ Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('3','Name3') Commit TransAction /* 如果只有Begin TransAction和RollBack TransAction 就算没报错了,还是会回滚的 Select * From Person */ --清除数据 Delete Person Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('3','Name3') RollBack TransAction /* SET XACT_ABORT ON时,在事务中,若出现错误,系统即默认回滚事务,但只对非自定义错误有效 SET XACT_ABORT OFF,默认值,在事务中,回滚一个语句还是整个事务视错误的严重程序而定, 用户级错误一般不会回滚整个事务 Select * From Person */ SET XACT_ABORT ON -- 打开 Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('3','Name3') Commit TransAction SET XACT_ABORT OFF -- 关闭 /* Try Catch 配合事务使用 Select * From Person */ Begin Try Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('3','Name3') Commit TransAction End Try Begin Catch Rollback TransAction End Catch /* 使用全局变量@@Error 配合事务使用 Select * From Person */ DECLARE @tran_error int; SET @tran_error = 0; Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') SET @tran_error = @tran_error + @@ERROR; print(@tran_error); Insert Into Person(PersonId,PersonName)Values('1','Name1') SET @tran_error = @tran_error + @@ERROR; print(@tran_error); Insert Into Person(PersonId,PersonName)Values('3','Name3') SET @tran_error = @tran_error + @@ERROR; print(@tran_error); IF(@tran_error > 0) BEGIN --执行出错,回滚事务 ROLLBACK TransAction; END ELSE BEGIN --没有异常,提交事务 COMMIT TransAction; END

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154838.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • django 自定义过滤器_adguard自定义过滤器

    django 自定义过滤器_adguard自定义过滤器前言虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。自定义过滤器首先在某个app中,创建

  • 微信朋友圈分享接口使用总结

    微信朋友圈分享接口使用总结微信朋友圈分享接口是非常细节的,而且不好调试,所以在此总结一下,以帮助大家首先应该遵循微信开发者文档介绍,用接口调试工具将你需要的接口的权限确定一下(这里得去申请接口权限)?然后将这个网址用手机端微信打开测试一下接口是否可用?http://203.195.235.76/jssdk/在保证所有的接口可用的前提下,下面我们正式进入主题我用的是java的struts框架写的后台vartimestam

  • SystemVerilog for循环中的fork join_none「建议收藏」

    SystemVerilog for循环中的fork join_none「建议收藏」moduletest;initialbeginmain();endtaskmain();//forkjoin_anyblock1fork#5$display(“THREAD1%0t”,$time);#25$display(“THREAD2%0t”,$ti…

  • Alex 的 Hadoop 菜鸟教程: 第2课 hadoop 安装教程 (CentOS6 CDH分支 yum方式)「建议收藏」

    Alex 的 Hadoop 菜鸟教程: 第2课 hadoop 安装教程 (CentOS6 CDH分支 yum方式)「建议收藏」前提条件:系统是centos6安装之前1.安装jdkcdh5对应的jdk是oracle-jdk1.7.0_25,注意是oracle-jdk,千万别yuminstalljdk就完事了,因为那样装的是openjdk到这边http://www.oracle.com/technetwork/java/javase/downloads/java-archiv

  • Qt编写GIF录屏工具(开源)「建议收藏」

    Qt编写GIF录屏工具(开源)「建议收藏」在平时的写作过程中,经常需要将一些操作动作和效果图截图成gif格式,使得涵盖的信息更全面更生动,有时候可以将整个操作过程和运行效果录制成MP4,但是文件体积比较大,而且很多网站不便于上传,基本上都支持gif动图,一般一个5秒左右的gif,800*600分辨率,可以很好的控制在500KB内,这样就比较完美的支持各大网站上传动图。最开始使用的是ScreenGif.exe,用了很久,感觉还可以,后面一…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号