--事务:
--是一种机制,一个操作序列,它包含了一组数据库操作命令,
--并且所有的命令作为一个整体一起想系统提交或撤销请求,
--即这一组数据库命令要么都执行,要么都不执行,
--因此事务是一个不可分隔的工作逻辑单元。
--作为一个逻辑单元,必须具备以下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
--是一种机制,一个操作序列,它包含了一组数据库操作命令,
--并且所有的命令作为一个整体一起想系统提交或撤销请求,
--即这一组数据库命令要么都执行,要么都不执行,
--因此事务是一个不可分隔的工作逻辑单元。
--作为一个逻辑单元,必须具备以下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