sql 事务-为何须要事务,什么是事务(Transaction)?

事务-为何须要事务sql

如,转帐问题:数据库

    假定钱从A转到B,至少须要两步:数据结构

A的资金减小并发

而后B的资金相应增长      spa

 

update bank set balance=balance-1000 where cid='0001'code

update bank set balance=balance + 1000 where cid='0002'索引

--查看结果。 事务

    SELECT * FROM bankci

   注意约束:金额不能小于10get

 

--事务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<span style= "font-family: 微软雅黑, 'Microsoft YaHei'; font-size: 14px;" > create table bank
(
cId char (4) primary key ,
balance money, --余额
)
alter table bank
add constraint CH_balance check (balance >=10)
go
--delete from bank
insert into bank values ( '0001' ,1000)
insert into bank values ( '0002' ,10)
go
update bank set balance=balance-1000 where cid= '0001'
update bank set balance=balance + 1000 where cid= '0002'
</span>

 

什么是事务(Transaction)

 

事务:同生共死

指访问并可能更新数据库中各类数据项的一个程序执行单元(unit)--也就是由多个sql语句组成,必须做为一个总体执行

这些sql语句做为一个总体一块儿向系统提交,要么都执行、要么都不执行 

语法步骤:

开始事务:BEGIN TRANSACTION       开启事务

事务提交:COMMIT TRANSACTION   --提交操做

事务回滚:ROLLBACK TRANSACTION --取消操做

判断某条语句执行是否出错:

全局变量@@ERROR;

@@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中全部T-SQL语句是否有错,咱们须要对错误进行累计;

         例:SET @errorSum=@errorSum+@@error

 

事务的ACID特性:

事务是做为单个逻辑工做单元执行的一系列操做。一个逻辑工做单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。

原子性

事务必须是原子工做单元;对于其数据修改,要么全都执行,要么全都不执行。

一致性

事务在完成时,必须使全部的数据都保持一致状态。在相关数据库中,全部规则都必须应用于事务的修改,以保持全部数据的完整性。事务结束时,全部的内部数据结构(如 B 树索引或双向链表)都必须是正确的。

隔离

由并发事务所做的修改必须与任何其余并发事务所做的修改隔离。事务识别数据时数据所处的状态,要么是另外一并发事务修改它以前的状态,要么是第二个事务修改它以后的状态,事务不会识别中间状态的数据。这称为可串行性,由于它可以从新装载起始数据,而且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。

持久性

事务完成以后,它对于系统的影响是永久性的。该修改即便出现系统故障也将一直保持。

 

 

SET IMPLICIT_TRANSACTIONS { ON | OFF } 

若是设置为 ON,SET IMPLICIT_TRANSACTIONS 将链接设置为隐式事务模式。若是设置为 OFF,则使链接恢复为自动提交事务模式。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<span style= "font-family: 微软雅黑, 'Microsoft YaHei'; font-size: 14px;" > select * from bank
--使用事务
begin transaction
declare @error int
set @error = 0
update bank set balance=balance-1000 where cid= '0001'
set @error = @error + @@error
update bank set balance=balance + 1000 where cid= '0002'
set @error = @error + @@error
if @error != 0
rollback transaction
else
commit transaction
go
select * from bank</span>

 

 

参考:雪维网 http://xuevi.com

相关文章
相关标签/搜索