您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

[MSSQL]SQLServer事务语法_MySQL

2024/5/29 22:40:06发布29次查看
事务全部是关于原子性的。原子性的概念是指可以把一些事情当做一个单元来看待。从数据库的角度看,它是指应全部执行或全部都不执行的一条或多条语句的最小组合。
为了理解事务的概念,需要能够定义非常明确的边界。事务要有非常明确的开始和结束点。sql server中的每一条select、insert、update和delete语句都是隐式事务的一部分。即使只发出一条语句,也会把这条语句当做一个事务-要么执行语句中的所有内容,要么什么都不执行。但是如果需要的不只是一条,可能是多条语句呢?在这种情况下,就需要有一种方法来标记事务的开始和结束,以及事务的成功或失败。可以使用一些t-sql语句在事务中”标记”这些点。
begin tran:设置起始点。
commit tran:使事务成为数据库中永久的、不可逆转的一部分。
rollback tran:本质上说想要忘记它曾经发生过。
save tran:创建一个特定标记符,只允许部分回滚。
一、begin tran
事务的开始可能是事务过程中最容易理解的概念。它唯一的目的就是表示一个单元的开始。如果由于某种原因,不能或者不想提交事务,那么这就是所有数据库活动将要回滚的起点。也就是说,数据库会忽略这个起点之后的最终没有提交的所有语句。
语法如下:
begin tran[saction] [ | ]
[ with mark [] ]
二、commit tran
事务的提交是一个事务的终点。当发出commit tran命令时,可以认为该事务是持久的。也就是说,事务的影响现在是持久的并会持续,即使发生系统故障也不受影响(只要有备份或者数据库文件没有被物理破坏就行)。撤销已完成事务的唯一方法是发出一个新的事务。从功能上而言,该事务是对第一个事务的反转。
commit tran语法如下:
commit tran[saction] [ | ]
三、rollback tran
rollback做的事情是回到起点。从关联的begin语句开始发生的任何事情事实上都会被忘记。
除了允许保存点外,rollback的语法看上去和begin或commit语句一样:
rollback tran[saction] [ | | | ]
四、save tran
保存事务从本质上说就是创建书签(bookmark)。为书签建立一个名称,在建立了”书签”之后,可以在回滚中引用它。创建书签的好处是可以回滚到代码中的特定点上-只要为想要回滚到的那个保存点命名。
语法如下:
save tran[scation] [ | ]
下面整个示例,先来建一张表如下:
--==================================================--作者:龚德辉--用途:生成新版报价--日期:2015-11-04--==================================================create proc up_newquo( @pricingcode as nvarchar(30), @newpricingcode as nvarchar(30))--set @pricingcode='qt-150804-001'--set @newpricingcode='qt-150804-001-1'asbeginbegin tran tran_newversion --开始事务declare @tran_error int;set @tran_error = 0; begin try insert into quo_standardcost select '', clientno, clientdes, clientfulldes, [description], partno, currencycode, rate, labourcost, labourrate, profitrate, taxrate, ismanufacture, qy, stype, loss, carrycostrate, capitaloccupationrate, manufacturingflag, manufacturingvalue, manufacturingrate, engineerid, engineer,@newpricingcode , getdate(), modifier, modifydate, [priority], saleremark, purremark, rdremark, finremark, issend, sendid, businessid, qty, amount, subtotal, scrap, materialcost, manufacturingexpense, laborcost, productioncost, taxcost, carrycost, sales, moq1k, moq3k, [5k], [3k], [1k], projectno from quo_standardcost where (pricingcode = @pricingcode) insert into [quo_standardcostdetail] select @newpricingcode ,[description] ,[item] ,[spec] ,[usage] ,[unit] ,[currency] ,[remarks] ,getdate() ,[modifier] ,[modifydate] ,[moq] from [quo_standardcostdetail] where (pricingcode = @pricingcode) set @tran_error = @tran_error + @@error; end trybegin catch print '出现异常,错误编号:' + convert(varchar,error_number()) + ',错误消息:' + error_message() set @tran_error = @tran_error + 1end catchif(@tran_error > 0) begin --执行出错,回滚事务 rollback tran; print '生成新版失败,取消生成!'; endelse begin --没有异常,提交事务 commit tran; print '生成新版成功!'; endend
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product