数据库事物
数据库事务( 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
- Atomicity(原子性):要么都成功 要么都失败
- Consistency(一致性):事务执行完,数据都是正确
- Isolation(隔离性): 两个事务同时操作一张表,B事务要么是在A事务前完成,要么在A事务完成后执行(锁表)
- Durability (持久性):数据提交后 就固化下来
本文来自博客园,作者:Raymon撸码记,转载请注明原文链接:https://www.cnblogs.com/RaymonGoGo/p/16495659.html