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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

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

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