前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql数据库回滚操作_sql回滚语句 rollback

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

作者头像
全栈程序员站长
发布2022-09-27 10:30:36
3.8K0
发布2022-09-27 10:30:36
举报
文章被收录于专栏:全栈程序员必看

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

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.cn/179247.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档