数据库事物

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成;

业务逻辑计算:一堆Sql语句---要求必须全部执行,才能算正常的完成;

1、事物的应用

a) 最简单的事物执行:一条Sql语句---就是一个事物来操作;
b) 多条Sql语句当做一个整体去执行,要么都成功,要么都失败;不可分割的逻辑单元;

2.语法

begin tran:设置起点

commit tran:使事务成为数据库中永久的、不可逆转的一部分
rollback tran:本质上说想要忘记它曾经发生过
save tran:创建一个特定标记,只允许部分回滚

3.案例

隐式事物---sqlServer帮助做的事物

use CustomerDB
GO
SET IMPLICIT_TRANSACTIONS ON 
 insert into [Company] (Name,CreateTime,CreatorId) values ('Raymon001---隐式事务','2019-03-20',3)
GO
UPDATE [Company] SET Name='Raymonccc',CreatorId='bbbbbb' WHERE id=1
GO
UPDATE [Company] SET [Name]='Raymon00xx' WHERE id=2

COMMIT 
SET IMPLICIT_TRANSACTIONS OFF

--delete Company where Id>3
select * from Company

显示事物:

use CustomerDB

--select * from Company

--delete Company where id>3

---开启事务
 begin tran
 --错误扑捉机制,看好啦,这里也有的。并且可以嵌套。
 begin try  
    --语句正确
    insert into [Company] (Name,CreateTime,CreatorId) values ('Raymon004','2019-03-20',3)
    --加入保存点
    --save tran SavePoint
    --CreatorId为int类型,出错
    --insert into [Company] (Name,CreateTime,CreatorId) values ('Raymon002','2019-03-20','测试')
    --语句正确
    insert into [Company] (Name,CreateTime,CreatorId) values ('Raymon005','2019-03-20','test')
    
	save tran SavePoint
 end try
 begin catch
    select Error_number() as ErrorNumber,  --错误代码
           Error_severity() as ErrorSeverity,  --错误严重级别,级别小于10 try catch 捕获不到
           Error_state() as ErrorState ,  --错误状态码
           Error_Procedure() as ErrorProcedure , --出现错误的存储过程或触发器的名称。
           Error_line() as ErrorLine,  --发生错误的行号
           Error_message() as ErrorMessage  --错误的具体信息
    if(@@trancount>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务
       rollback tran  ---由于出错,这里回滚到开始,第一条语句也没有插入成功。
 end catch
 if(@@trancount>0)
 rollback tran SavePoint  --如果成功Company表中,将会有3条数据。

 --表本身为空表,ID ,Numb为int 类型,其它为nvarchar类型
 select * from [Company]

4.事物的ACID

  1. Atomicity(原子性):要么都成功 要么都失败
  2. Consistency(一致性):事务执行完,数据都是正确
  3. Isolation(隔离性): 两个事务同时操作一张表,B事务要么是在A事务前完成,要么在A事务完成后执行(锁表)
  4. Durability (持久性):数据提交后 就固化下来
posted @ 2022-07-19 20:26  Raymon撸码记  阅读(24)  评论(0编辑  收藏  举报