事務-爲何須要事務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