sql数据库回滚操作_sql回滚语句 rollback

sql数据库回滚操作_sql回滚语句 rollbackcreatetable testtable(idnvchart(50)primkey,namenvchart(50),remarknvchart(50))select*fromtesttable go BEGINTRY –SQLServer需要显示的定义开始一个事务.BEGINTRANSACTION;–插入2条同样的数据

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

create table testtable (

id nvchart(50) prim key,

name nvchart(50),

remark nvchart(50)

)

select * from testtable

 go

 BEGIN TRY

 — SQL Server 需要显示的定义 开始一个事务.

BEGIN TRANSACTION;

— 插入2条同样的数据,使主键重复,引发错误后回滚事务.

INSERT INTO testtable(id, name) VALUES (4, ‘FOUR’);

INSERT INTO testtable(id, name) VALUES (4, ‘FOUR’);

— 执行成功后,需要提交事务.

COMMIT;

END TRY

 BEGIN CATCH

 PRINT(‘Main.错误代码 = ‘ + STR(ERROR_NUMBER()));

 PRINT(‘Main.错误严重级别 = ‘ + STR(ERROR_SEVERITY()));

 PRINT(‘Main.错误状态代码 = ‘ + STR(ERROR_STATE()));

 PRINT(‘Main.错误信息 = ‘ + ERROR_MESSAGE());

 — 回滚事务

 ROLLBACK;

 END CATCH

 go

 select * from testtable;

 go

二、嵌套事务的层次是由@@TranCount全局变量反映出来的。

每一次Begin Transaction都会引起@@TranCount加1。而每一次Commit Transaction都会使@@TranCount减1,而RollBack Transaction会回滚所有的嵌套事务包括已经提交的事务和未提交的事务,而使@@TranCount置0。

例如

 
 BEGIN TRAN –@@TRANCOUNT值为0
      SELECT @@TRANCOUNT –值为1
          BEGIN TRAN
                SELECT @@TRANCOUNT –值为2
          COMMIT TRAN
          SELECT @@TRANCOUNT –值为1
  ROLLBACK TRAN
  SELECT @@TRANCOUNT –值为0
    
三、

在SQL Server中使用rollback会回滚所有的未提交事务状态,但是有些时候我们只需要回滚部分语句,把不需要回滚的语句提到事务外面来,虽然是个方法,但是却破坏了事务的ACID。

其实我们可以使用SQL Server中的Savepoints来解决上述问题。

示例如下:

1.先建立测试表: 
CREATE TABLE [dbo].[ttt]( 
    [Id] [int] NULL, 
    [mark] [int] NULL 
)

 

2.SQL 语句 
begin tran 
    insert into ttt values(3,’3′); 
save tran point1 
    insert into ttt values(4,’4′);

rollback tran point1

commit

 

执行结果如下: 
Id    mark 
3    3

可见,虽然3,4都在一个事务中,但是由于使用了SavePoints,所以3被提交了,4被回滚了。



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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179247.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Win10 删除默认共享文件夹

    在CMD下删除默认共享文件可能很多人都遇到过此问题,新买的笔记本安装了Win10系统,按照激活的顺序没有administrator账户,系统内只有自己设置的账号。而且,你在cmd或者计算机管理内里进行一些操作时都显示无权限或者拒绝访问。尤其是想关闭掉默认共享的时候,无法完成。解决方法很简单,我们用管理员进入CMD:在运行对话框内输入CMD后,先不要立即回车进入,按住CTRL+SHIFT+EN…

    2022年4月13日
    394
  • eclipse配置svn的步骤_eclipse切换svn地址

    eclipse配置svn的步骤_eclipse切换svn地址下载svn插件链接:https://pan.baidu.com/s/1BeGikwxhv21abBA5Hhy8zA提取码:6666D盘创建SVN文件夹打开svn插件复制如图两个文件夹到svn目录下创建svn.link并配置位置在你安装Eclipse/eclipse/dropins创建svk.link删除org.eclipse.update文件夹位置在你安装Eclipse/eclipse/configuration删除org.eclipse.update最后在eclips

    2022年9月26日
    4
  • CentOS7下安装mysql5.7[通俗易懂]

    CentOS7下安装mysql5.7[通俗易懂]更多精彩技术分享请浏览本人博客:https://blog.csdn.net/wohiusdashi一、安装YUMRepo1、由于CentOS的yum源中没有mysql,需要到mysql的官网下载yumrepo配置文件。下载命令:wgethttps://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm…

    2022年4月19日
    130
  • 详解单调栈算法

    详解单调栈算法前言如果你对这篇文章可感兴趣,可以点击「【访客必读-指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。栈属于基础数据结构之一,基础到仅用「后进先出」这四个字即可完整概括其核心特征。然而,基础并不代表着简单,「后进先出」的背后反而隐藏着多样的变化与极其广泛的应用。在本篇文章中,我们将针对在基础栈上稍加改动所形成的「单调栈」算法进行详解。该算法与「单调队列」组成了算法题中最常考察的线性数据结构,属于面试中必知必会的算法知识。栈首先我们来回忆一下「栈」。「栈」是一种「后进先出」的线

    2022年9月23日
    5
  • CGLib简单入门

    CGLib简单入门一、CGlib简介        CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。 当然这些实际的功能是asm所提供的,asm又是什么?Java字节码操控框架,具体是什么大家可以上网查一查,毕竟我们这里所要讨论的是cglib。cglib就是封装了asm,简化了asm的操作,实现了在运行期动态生成新的class。 可能大家还感觉不到它的

    2022年5月5日
    51
  • python取整符号_python 取整「建议收藏」

    广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!(1)向下取整向下取整很简单,直接使用int()函数即可,如下代码(python2.7.5idle)a=3.75int(a)3(2)四舍五入第二种就是对数字进行四舍五入,具体的看下面的代码:a=3.25;b=3.75round(a);round(b)3.0…

    2022年4月18日
    129

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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