码迷,mamicode.com
首页 > 数据库 > 详细

sql 事务

时间:2015-07-28 13:05:11      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

事务是一种机制、是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.

事务的四大属性:

1   原子性(Atomicity):事务是一个完整的操作。
2  
一致性(Consistency):当事务完成时,数据必须处于一致状态。
3  
隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。
4  
持久性(Durability):事务完成后,它对于系统的影响是永久性的。
 
三、创建事务
T-SQL
中管理事务的语句:
1
开始事务:begin transaction
2
提交事务:committransaction
3
回滚事务:rollback transaction
 
事务分类:
1
显式事务:begin transaction明确指定事务的开始。
2
隐性事务:打开隐性事务:set implicit_transactions on,当以隐性事务模式操作时,SQL Servler将在提交或回滚事务后自动启动新事务。无法描述事务的开始,只需要提交或回滚事务。
3
自动提交事务:SQLServer的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。
 
示例:张三转800元到李四帐户上。
  use stuDB
go
--
创建帐户表bank--
if exists(select* from sysobjects where name=‘bank‘)
    drop table bank
create table bank
(
    customerName char(10),    --
顾客姓名
    currentMoney money       --
当前余额
)
go
/**//*--
添加约束,帐户不能少于元--*/
alter table bank add
        constraint CK_currentMoneycheck(currentMoney>=1)
/**//*--
插入测试数据--*/
insert into bank(customerName,currentMoney)
select ‘
张三‘,1000union
select ‘
李四‘,1

select * from bank
go

/**//*--使用事务--*/
use stuDB
go
--
恢复原来的数据
--update bank set currentMoney=currentMoney-1000 where customerName=‘

set nocount on    --
不显示受影响的行数
print ‘
查看转帐事务前的余额
select * from bank
go

/**//*--开始事务--*/
begin transaction
declare @errorSum int    --
定义变量,用于累计事务执行过程中的错误
/**//*--
转帐--*/
update bank set currentMoney=currentMoney-800 where customerName=‘
张三
set @errorSum=@errorSum+@@error    --
累计是否有错误
update bank set currentMoney=currentMoney+800 where customerName=‘
李四
set @errorSum=@errorSum+@@error --
累计是否有错误

print ‘查看转帐事务过程中的余额
select * from bank

/**//*--根据是否有错误,确定事务是提交还是回滚--*/
if @errorSum>0
    begin
        print ‘
交易失败,回滚事务.‘
        rollback transaction
    end
else
    begin
        print ‘
交易成功,提交事务,写入硬盘,永久保存!
        commit transaction
    end
go

print ‘查看转帐后的余额
select * from bank
go

版权声明:本文为博主原创文章,未经博主允许不得转载。

sql 事务

标签:

原文地址:http://blog.csdn.net/qinlinlinwoaini/article/details/47102787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!