SQL 事务(Transaction)
2017-03-05 16:11
183 查看
1、概念
指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行
语法步骤:
开始事务:BEGIN TRANSACTION --开启事务
事务提交:COMMIT TRANSACTION --提交操作
事务回滚:ROLLBACK TRANSACTION --取消操作
2、建表
--建表 CREATE TABLE [Person]( [PersonId] NVARCHAR(100) PRIMARY KEY , ---主键 [PersonName] NVARCHAR(100) NULL )
3、事务
/* 如果只有Begin TransAction和Commit TransAction 就算报错了,也是不会回滚的 Select * From Person */ Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('3','Name3') Commit TransAction /* 如果只有Begin TransAction和RollBack TransAction 就算没报错了,还是会回滚的 Select * From Person */ --清除数据 Delete Person Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('3','Name3') RollBack TransAction /* SET XACT_ABORT ON时,在事务中,若出现错误,系统即默认回滚事务,但只对非自定义错误有效 SET XACT_ABORT OFF,默认值,在事务中,回滚一个语句还是整个事务视错误的严重程序而定, 用户级错误一般不会回滚整个事务 Select * From Person */ SET XACT_ABORT ON -- 打开 Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('3','Name3') Commit TransAction SET XACT_ABORT OFF -- 关闭 /* Try Catch 配合事务使用 Select * From Person */ Begin Try Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('1','Name1') Insert Into Person(PersonId,PersonName)Values('3','Name3') Commit TransAction End Try Begin Catch Rollback TransAction End Catch /* 使用全局变量@@Error 配合事务使用 Select * From Person */ DECLARE @tran_error int; SET @tran_error = 0; Begin TransAction Insert Into Person(PersonId,PersonName)Values('1','Name1') SET @tran_error = @tran_error + @@ERROR; print(@tran_error); Insert Into Person(PersonId,PersonName)Values('1','Name1') SET @tran_error = @tran_error + @@ERROR; print(@tran_error); Insert Into Person(PersonId,PersonName)Values('3','Name3') SET @tran_error = @tran_error + @@ERROR; print(@tran_error); IF(@tran_error > 0) BEGIN --执行出错,回滚事务 ROLLBACK TransAction; END ELSE BEGIN --没有异常,提交事务 COMMIT TransAction; END
相关文章推荐
- T-Sql(二)事务(Transaction)
- Oracle PL/SQL之SET TRANSACTION READ ONLY(事务隔离性)
- sql事务(Transaction)用法介绍及回滚实例
- html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
- C#使用SqlConnection的事务SqlTransaction
- SqlDataAdapter.update结合事务(SqlTransaction)批量更新数据
- Oracle PL/SQL之SET TRANSACTION READ ONLY(事务隔离性)
- ADO.NET 2.0中新的事务处理机制的引入带来前所未有的新体验(给所有不了解TransactionScope的朋友,以及还在用SqlTransaction的朋友)
- sql事务(Transaction)用法介绍及回滚实例
- MS SQL Server Transaction Log truncation 事务日志截断
- Transact-SQL事务与SqlTransaction和TransactionScope的使用
- sql事务(Transaction)用法介绍及回滚实例
- Oracle PL/SQL之SET TRANSACTION READ ONLY(事务隔离性)
- 详细介绍SQL2005及2008中事务SqlTransaction和TransactionScope使用方法[转]
- sql事务(Transaction)用法介绍及回滚实例
- sql事务(Transaction)用法介绍及回滚实例
- sql事务(Transaction)用法介绍及回滚实例
- Oracle PL/SQL之SET TRANSACTION READ ONLY(事务隔离性)
- sql 事务(transaction)
- sql事务(Transaction)用法介绍及回滚实例