一、事务的概念
概念:数据库中的事物是一种机制,是一个不可分割的工作逻辑单元
属性:1、原子性:哥哥元素是不可分的
2、一致性:所有的数据都保持一致状态
3、隔离性:对数据进行修改的所有并发事务是彼此隔离的
4、持久性:操作结果对于系统的影响应该是永久的
作用:要么所有作用全部完成,要么所有操作全部不执行,这样一来,要么增加和减少的廋执行完毕,一旦出错,就回滚到什么都没有执行的状态
二、创建事务
1、显示事务
开始事务:begin transaction
提交事务:commit transaction
回滚事务:rollback transaction
2、隐式事务
set implicit_trasactions on 开启
commit transaction
rollback transactioni
三、创建事务的原则
1、事务要尽可能短
2、访问的数据尽量少
3、浏览数据时尽量不要打开事务
4、在事务处理期间尽量不要请求用户输入
use Bank go --判断存储过程是否存在 if object('proc_transfer','procedure') is not null drop procedure proc_transfer go --转账的存储过程 create procedure proc_transfer @intoAccountName varchar(20),--转入账户 @outAccountName varchar(20),--转出账户 @money money--转出金额 as --判断转户名是否存在 if not exists(select 1 from AccountInfo where accountName=@intoAccountName) begin print '转入账户不存在' return end if not exists(select 1 from AccountInfo where accountName=@outcountName) begin print '转入账户不存在' return end declare @errorSum int--声明一个变量,用于累加错误 set @errorSum=0 --初始化,没有错误 begin transaction --开始事务 --执行update语句 update AccountInfo set currentMoney=currentMoney-@money where accountName=@outAccountName set @errorSum=@errorSum+@@error --累加错误 update AccountInfo ser currentMoney=currentMoney+@money where accountName=@intoAccountName set @errorSum=@errorSum+@@error --累加错误 if @errorSum<>0 begin print '转账失败,回滚事务' rollback transaction end else begin print '转账成功' commit transction end go
五、事务的级别
1、read uncommitted 不隔离数据
2、read committed(默认)不允许读取没有提交的数据
3、repeatable read
4、snapshot快照隔离
5、serializable讲事务所要用到的数据表全部锁定
语法
set transaction isolation level 隔离级别(以上5种)
T-SQL语句