MSSQL事务

来源:互联网 发布:50 量子计算机 知乎 编辑:程序博客网 时间:2024/05/16 03:39
sql分享 
--事务:
--是一种机制,一个操作序列,它包含了一组数据库操作命令,
--并且所有的命令作为一个整体一起想系统提交或撤销请求,
--即这一组数据库命令要么都执行,要么都不执行,
--因此事务是一个不可分隔的工作逻辑单元。
--作为一个逻辑单元,必须具备以下4个属性:
--(1).原子性(Atomic)
--必须执行一个完整的工作,要么执行全部数据的修改,
--要么全部数据的修改都不执行;
--(2).一致性(Consistent)
--指当事务完成时,必须使所有数据都具有一致的状态。
--在关系型数据库中,所有的规则必须应用到事务的修改上,
--以便维护所有数据的完整性。
--(3).独立性(Isolated)
--对数据进行修改的所有并发事务是彼此隔离的,
--这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
--(4).持久性(Durability)
--事务完成后,它对于系统的影响是永久性的。
--该修改即使出现系统故障,也将一直保持。

--如何创建事务
--(1)开始事务:begin transaction
--(2)提交事务:commit transaction
--(3)回滚(撤销)事务: rollback transaction

--创建中国银行帐户表BankOfChina[作者:英儿[地址:www.52mvc.com]]
Create Table BankOfChina
(

customerName nvarchar(10),  --顾客姓名

currentMoney money check(currentMoney>=1) --当前余额
)
select * from BankOfChina-- 查询中国银行帐户表表
update BankOfChina set currentMoney=1002 where customerName='大勇'

select BankOfChina.customerName,BankOfChina.currentMoney as '查看转账事务前的余额' from BankOfChina
--------------------------------------------------------------
print '从现在开始到结束的语句是一个整体'
Begin Transaction --开始事务
declare @errorSum int set @errorSum=0  --初始化为0,即无错误
--从大勇的账户转账1000元到小勇的账户上
update BankOfChina set currentMoney=currentMoney-1000 where customerName='张三' 
set @errorSum=@errorSum+@@error --累计是否有错误
update BankOfChina set currentMoney=currentMoney+1000 where customerName='李四' 
set @errorSum=@errorSum+@@error --累计是否有错误
select BankOfChina.customerName,BankOfChina.currentMoney as '查看转账事务过程中的余额' from BankOfChina
--------------------------------------------------------------
if @errorSum <> 0  --判断@errorSum不等于0
begin

print '交易失败,回滚事务'

rollback Transaction
end
Else
begin

print '交易成功,提交事务,写入硬盘,永久地保存'

commit Transaction
end
Go
print '注意:交易结束,千万不要忘了写批处理Go,不然事务会出错!'
select BankOfChina.customerName,BankOfChina.currentMoney as '查看事务转账的结果' from BankOfChina
--------------------------------------------------------------
---------------------第1种事务处理--------------------------
begin transaction
declare @errorSum int set @errorSum =0
delete a where id=1
delete b where id=1

set @errorSum=@errorSum+@@error
if @errorSum <> 0
    begin

print '失败,回滚事务'

rollback Transaction
    end
else
    begin

print '成功,提交事务'

commit Transaction
    end
-------------------------第2种事务处理---------------------
begin transaction

begin try

delete a where id=1

delete b where id=1

commit transaction
  end try
begin catch
    
rollback transaction 
end catch
更多:http://www.52mvc.com/topictag-54.aspx
原文来自我论坛:http://www.52mvc.com/showtopic-1667.aspx
    
原创粉丝点击