SQL – 16.事務

來源:互聯網
上載者:User

指訪問並可能更新資料庫中各種資料項目的一個程式執行單元(unit)--也就是由多個sql語句組成,必須作為一個整體執行
這些sql語句作為一個整體一起向系統提交,要麼都執行、要麼都不執行
文法步驟:
開始事務:BEGIN TRANSACTION
事務提交:COMMIT TRANSACTION
交易回復:ROLLBACK TRANSACTION
判斷某條語句執行是否出錯:
全域變數@@ERROR;
@@ERROR只能判斷當前一條T-SQL語句執行是否有錯,為了判斷事務中所有T-SQL語句是否有錯,我們需要對錯誤進行累計;
         例:SET @errorSum=@errorSum+@@error

 

如,借錢問題:
    假定錢從A轉到B,至少需要兩步:

  • A的資金減少
  • 然後B的資金相應增加   
隱藏行號 複製代碼 ? 這是一段程式碼。  UPDATE bank SET uMoney = uMoney - 1000
WHERE uName= '家寶'
@@error
UPDATE bank SET uMoney = uMoney + 1000
WHERE uName= '奧巴馬'
@@error
--查看結果。
SELECT * FROM bank

 

CREATE TABLE bank
(
    uName CHAR(10),  --姓名
    uMoney MONEY     --當前餘額
)
GO
ALTER TABLE bank
   ADD CONSTRAINT CK_nowMoney    
       CHECK(uMoney>=1)
GO
INSERT INTO bank(uName, uMoney)
        VALUES('家寶',1000)
INSERT INTO bank(uName, uMoney)
        VALUES('奧巴馬',1)



例題:

1.表category

select * from category

 

2.建立約束c_name名字不小於2個字

 

3.執行下列語句報錯

update category set c_name = '1' where c_id =1

 

4.寫事務

declare @errNum int
set @errNum=0
begin transaction      --先開始事務
update category set c_name = '1' where c_id =1
set @errNum =@errNum +@@error
delete from Category where c_id =120
set @errNum =@errNum +@@error
if @errNum=0
begin
    commit transaction
    print 'OK!'
end
else
begin
    rollback transaction
    print 'ERROR!'
end
select * from category

 

執行結果:

結果:c_id=120也沒有刪除

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.