一,事务的理解
事务是什么,为什么要使用事务,先说一个实际的问题:假如A要通过银行卡转账100元到B的银行卡里,那么要实现的过程就是A的账户-100元,B的账户+100元,这时执行SQL语句分为两个步骤,(1),update A set money-100,(2),update B set money+100,但是这样会出现一些问题:如果语句(1)执行成功了,而(2)执行失败了,sql语句有时执行失败是很正常的事情,但是如果出现在以上的业务中,就会造成很大的问题,这时我们就想能不能有这么一种方式:要么执行成功,则A-100,B+100,一旦这个过程中有没有执行成功的语句,则我们就回到初始状态,什么也不做,而事务正是帮我们做到了这一点。
二,事务的属性
(1)原子性:事务中所有元素作为一个整体提交或回滚,事务的元素是不可分的,事务是一个完整操作
(2)一致性:事务完成时,数据必须是一致的,也就是说,和事务开始之前,数据存储中的数据处于一致状态,保证数据的无损
(3)隔离性:对数据进行修改的多个事务是彼此隔离的,这表明事务是必须独立的
(4)持久性,事务完成之后,对于数据库的影响是永久的。
三,事务的简单例子
注意:1 单独执行第一条SQL语句,则执行成功
2 单独执行第二条SQL语句,会执行失败,我设置了MovieName的 约束:len(MovieName)>=2
--定义一个变量
declare @errorNum int
--给该变量赋初始值
set @errorNum=0
--开始事务
begin transaction
--执行第一条SQL语句
delete from Movie where MovieID=1
--获得此时错误号
set @errorNum=@errorNum+@@error
--执行第二条SQL语句
update Movie set MovieName='1' where MovieID=2
--获得此时的错误号
set @errorNum=@errorNum+@@error--判断错误号
if(@errorNum=0)
--为0时提交事务
begin
commit transaction
print 'OK'
end
else
--回滚事务
begin
rollback transaction
print 'Error'
end