您的位置:首页 > 数据库

sql 事务

2015-07-28 11:26 253 查看
事务是一种机制、是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.

事务的四大属性:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: