定义
事务就是被绑定在一起作为一个逻辑工作单元的SQL语句组,如果任何一个语句操作失败那么整个操作就被失败,进而回滚到操作前状态,或者是上个节点。为了确保要么执行,要么不执行,就可以使用事务。要将一组语句作为事务考虑,就需要通过ACID测试,即原子性(Atomicity),一致性(Consistency),隔离性(Isolation)和持久性(Durability)。
使用
开始事务
begin Transaction 事务名
提交事务
commit transaction 事务名
回滚事务
rollback transaction 事务名
事务保存点
save transaction 事务名
举例
通过存储过程和事务实现转账功能
表名:Customers
表设置了约束金额不能小于0并且大于2000
表数据
通过MVC+EF来实现效果图
存储过程的编写
USE [jobDB]
GO
/****** Object: StoredProcedure [dbo].[cp_Charge] Script Date: 2020/5/27 16:30:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[cp_Charge]
(
@idout int,
@idin int,
@remain decimal (18,2)
)
as
--A转钱给B
--开始事务
begin Transaction tran_Charge
--定义变量记录错误数
declare @err_nums int
set @err_nums=0
begin try
update Customers set Remain=Remain+@remain where id=@idout
set @err_nums=@err_nums+@@error
update Customers set Remain=Remain-@remain where id=@idin
set @err_nums=@err_nums+@@error
end try
begin catch
print '错误编号:' +convert(varchar, error_number())+'错误消息'+error_message()
set @err_nums=@err_nums+1
end catch
if(@err_nums>0) --说明语句有错
rollback Transaction tran_Charge --回滚事务
else
commit Transaction tran_Charge --提交事务
结果图
如果金额小于0或者大于2000就会转账失败,双方的金额不会改变