sqlsever回滚操作_sqlserver事务与回滚

本文介绍了在SQLServer中如何使用事务进行数据操作的安全验证,强调了在更新语句中避免错误的重要性。通过示例展示了BEGIN TRANSACTION、ROLLBACK TRANSACTION和SET XACT_ABORT ON的用法,以及如何在TRY-CATCH结构中管理事务。此外,还提及了在Flask-SQLAlchemy、Spring+MyBatis框架中事务回滚的相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果要在Production执行数据改动必须小心,可以使用事务提前验证一下自己写的SQL是不是你期望的。尤其是Update的where 条件有问题的话,跟新的记录就会超出预期的范围。如下面的语句,一着急我差点把cartid = 678417 忘了,要是在Production执行影响就大了。

BEGIN TRANSACTION

update cartitem set deleted=0 where cartid = 678417 and modifieddate > '2014-08-07'

select * from cartitem where cartid = 678417 order by modifieddate desc

ROLLBACK TRANSACTION

下面语句实现begin tran 和commit tran之间的语句,任一如果出现错误,所有都不执

set XACT_ABORT ON ---如果不设置该项为ON,在sql中默认为OFF,那么只只回滚产生错误的 Transact-SQL 语句;设为ON,回滚整个事务

begin tran t1 ---启动一个事务

update cartitem set deleted=0 where cartid = 678417 and modifieddate > '2014-08-07'

delete from [Order] where Id=2103264408

commit tran t1 ---提交事务

事务的try, Catch

BEGIN TRY

BEGIN TRANSACTION

insert into dbo.area values('1111')

insert into dbo.area values('2222')

select 1/0

insert into dbo.area values('333')

COMMIT

END TRY

BEGIN CATCH

IF @@TRANCOUNT > 0

ROLLBACK

DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int

SELECT @ErrMsg = ERROR_MESSAGE(),

@ErrSeverity = ERROR_SEVERITY()

RAISERROR(@ErrMsg, @ErrSeverity, 1)

END CATCH

flask-sqlalchemy、pytest 的单元测试和事务自动回滚

flask-sqlalchemy.pytest 的单元测试和事务自动回滚 使用 flask-sqlalchemy 做数据库时,单元测试可以帮助发现一些可能意想不到的问题,像 delete-cascad ...

spring + myBatis 常见错误:注解事务不回滚

最近项目在用springMVC+spring+myBatis框架,在配置事务的时候发现一个事务不能回滚的问题. 刚开始配置如下:springMVC.xml配置内容: spring.xml配置内容 从上 ...

抛出自定义异常,spring AOP事务不回滚的解决方案

spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...

spring + mybatis 注解式事务不回滚的原因分析 @Transactional

在一个项目中发现spring的事务无法回滚. DEBUG: org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.ses ...

Spring事务异常回滚,捕获异常不抛出就不会回滚(转载) 解决了我一年前的问题

最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......    为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常 ...

MySql事务无法回滚的原因

使用MySQL时.假设发现事务无法回滚,但Hibernate.Spring.JDBC等配置又没有明显问题时.不要苦恼,先看看MySQL创建的表有没有问题.即表的类型. InnoDB和MyISAM是在使 ...

springmvc注解式事务手动回滚

Spring的AOP事务管理默认是针对unchecked exception回滚(运行期异常,Runtime Exception),如果希望手动控制事务的回滚,可以通过 TransactionAspe ...

Spring事务不回滚原因分析

Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离. 在我完成一个项目的时候,遇到了一个Spring事务不回滚的问题,通过aspectJ和@Transacti ...

SSM-MyBatis-09:Mybatis中SqlSession的close为什么能造成事务的回滚

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 经过上几次的查找,笔者我就简单的说一下查找的思路,留给读者自己实践 同样找到sqlsession的实现类,-- ...

随机推荐

Android Service 与 Thread 的区别

Ref:http://blog.youkuaiyun.com/jiangwei0910410003/article/details/17008687 1). Thread:Thread 是程序执行的最小单元,它是 ...

PostgreSQL Replication之第十二章 与Postgres-XC一起工作(3)

12.3 配置一个简单的集群 在本章中,我们要建立一个由三个数据节点组成的集群.一个协调节点,以及管理集群的全局事务管理节点.对于每个组件,我们必须创建一个目录: hs@vm:~/data$ ls - ...

特殊用途语言特性——默认参数、内联函数和constexptr函数

1 默认实参 某些函数有这样一些参数,在函数的很多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参.调用含有默认实参的函数时,可以包含该实参,也可以省略该实参. 我们可 ...

C++输入结束

通过判断输入是否等于EOF,可以结束输入. EOF 是个宏,其意思是:End Of File,文件尾标志. 从数值上来看,就是整数-1. 在C语言的头文件中对其进行了宏定义: libio.h:     ...

用 OUTLOOK VBA 生成 自定义文件夹 邮件列表

Option Explicit Sub TestFolder() 'Dim outlookapp, myitem, myfolder 'Dim mailcounts As Integer ' ' 'S ...

JavaScript 应用开发 #4:切换任务的完成状态

在勾选了任务项目左边的对号(复选框)以后,会将任务的状态标记为已完成,取消勾选的话,又会把任务的状态标记为未完成.所以, 我们需要一个可以切换任务完成状态的方法.在任务模型里面,表示任务状态的属性是 ...

python3控制语句---选择结构语句

python中的控制语句主要有if.if--else.if--slif--else.pass语句.其实python的控制语句与其他语言的控制语句工作原理基本一样.控制语句可以分为选择结构语句和循环结构 ...

mysql 有没有参数都报错“mysql: unknown option”

报错: [root@XXXX tmp]# mysql -uroot -pmysql: unknown option '--You have new mail in /var/spool/mail/ro ...

SpringBoot中常用注解@Controller/@RestController/@RequestMapping的区别

@Controller 处理http请求 @Controller //@ResponseBody public class HelloController { @RequestMapping(valu ...

ThinkPHP3.2 where方法的使用

where方法的用法是ThinkPHP查询语言的精髓,也是ThinkPHP ORM的重要组成部分和亮点所在,可以完成包括普通查询.表达式查询.快捷查询.区间查询.组合查询在内的查询操作.where方法 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值