首页 > 数据库 >SQLServer第八章:事务 transaction

SQLServer第八章:事务 transaction

时间:2022-09-18 21:35:43浏览次数:100  
标签:事务 transaction -- SQLServer 第八章 accountInfo num error

事务:是一种机制,独立的工作单元,保证结果只产生成功或失败

特性(ACID):
  原子性:要么成功,要么失败
  一致性:操作前后表中数据是一致的
  隔离性:当前事务操作的数据,对其它事务是隔离的
  持久性:一旦提交到服务器就是永久性的,不能回滚

事务的分类:
  显式事务: 一个功能,需要多个sql语句共同完成
    开启事务:begin transaction(tran)
    提交事务:commit transaction
    回滚事务:rollback transaction
  隐式事务:
    自动提交事务(默认):sql中默认每个sql都是一个单独的事务

创建一个表做演示

if exists(select * from sys.objects where name='accountInfo')
begin
    drop table accountInfo
end
go
create table accountInfo
(
    id int primary key identity,
    accountName varchar(10) not null,
    balance money check(balance>=1) not null
)
go
--添加两个帐户
insert into accountInfo values('韦小宝',5000000)
insert into accountInfo values('梅超风',6000000)
go
select * from accountInfo

事务处理语句

--定义变量累加错误号
declare @error_num int
set @error_num = 0
--事务来处理转帐
--开启事务
begin transaction

update accountInfo set balance=balance+5000000 where accountName='韦小宝'
--累加错误号:上面不报错,所以不会累积事务
set @error_num=@error_num+@@ERROR

update accountInfo set balance=balance-5000000 where accountName='梅超风'
--累加错误号:前面已经限制钱>=1使用,这里就会报错,则累积一个事务
set @error_num=@error_num+@@ERROR
--@@ERROR:当前一个语句遇到错误,则返回错误号,否则返回0。需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量中以备将来使用。
if(@error_num =0)
begin
    --提交
    commit transaction
    print '转帐成功'
end
else
begin
    --回滚
    rollback transaction
    print '转帐失败'
end

select * from accountInfo

 

标签:事务,transaction,--,SQLServer,第八章,accountInfo,num,error
From: https://www.cnblogs.com/longxinyv/p/16705763.html

相关文章

  • SQLSERVER 多表关联更新表中字段
    现实案例3张表,需要把表1的某个字段批量更新到表3的某个字段,表1的主键是表2的外键,表3的主键是表2的外键UPDATE表1别名SET 表1别名.字段1=表2别名.字段1FROM表1定义别......
  • 【SQLServer】并行执行计划中的分支和线程
    SQLServer2012的执行计划增加了保留线程和并行执行计划的使用信息。例如下面的查询:SELECTBP.ProductID,cnt=COUNT_BIG(*)FROMdbo.bigProductASBPJOI......
  • Spring事务(二)-@Transactional事务失效的场景
    有时候,我们明明在类或者方法上添加了@Transactional注解,却发现方法并没有按事务处理。其实,以下场景会导致Spring的@Transactional事务失效。1、事务方法所在的类没有......
  • sqlserver substring 函数截取text格式文本格式乱码导致的定位错误的问题
    描述:使用charindex函数对text字段所要截取的内容下标读取例如:str(表字段名称-类型text)=<p>●123456</p>截取123,      index1=chaindex('1',str),inde......
  • MSSQL Sqlserver 使用ms未公开的存储过程重建全库表索引
    两个有用的ms未公开的存储过程sp_MSforeachDB遍历所有的数据库sp_MSforeachtable遍历为库中所有的表可以用sp_helptext来查看他们的实现代码 应用:---重建全库索......
  • 第八章-Pure DI 和 应用组成
    PureDI在第一章中,我们简要介绍了DI的三个方面:对象组合(ObjectComposition),生命周期管理(LifetimeManagement)和拦截(Interception)。在本书的这一部分,我们将深入探讨这......
  • SQLServer重建索引
    Use[数据库名称]GoDECLARE@DBCCStringNVARCHAR(1000)DECLARE@TableNameVARCHAR(100)DECLARECur_IndexCURSORFORSELECTNameASTblNameFROMsysobjectsWHE......
  • spring中@Transactional注解的作用,使用场景举例
    一,spring中管理事务一般使用@Transactional注解,下面对@Transactional使用的各个场景做一个列举,尽可能的将所有场景罗列出来1,场景一,最常见的用法,在方法上使用@Transactio......
  • @Transactional注解详细用法
    概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。SpringFramework对事务管理提供了一致的抽象,其特点如下:为不同的事务API提供一......
  • vscode连接sqlserver(以及一直正在扩展问题的解决方法)
    我又回来啦,时隔两年,我终于正式成为一名程序媛!电脑突然坏了,勉强抢修回来,师父说还在保修期内帮我返厂检修,但是在等待的时间,就说上班咱也不能摸鱼啊,还是想办法继续捣鼓点作业......