真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SQLServer事務(wù)

2、T-SQL查詢語句 詳解事務(wù)及鎖

創(chuàng)新互聯(lián)公司專注于葉城企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。葉城網(wǎng)站建設(shè)公司,為葉城等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

                                           設(shè)計(jì)者:楊文

                                           防偽碼:千淘萬浪雖辛苦,吹盡黃沙始到金

SQL Server 通過支持事務(wù)機(jī)制以保證數(shù)據(jù)的一致性。

SQL Server 事務(wù)

案例:在日常生活中,大家可能使用過銀行轉(zhuǎn)賬,銀行轉(zhuǎn)賬操作往往會(huì)涉及兩個(gè)或兩個(gè)以上的賬戶。在轉(zhuǎn)出賬戶的存款減少一定金額的同時(shí),轉(zhuǎn)入賬戶則會(huì)增加相應(yīng)金額的存款,現(xiàn)在,假定張三的賬戶轉(zhuǎn)賬1000元到李四的賬戶。該如何實(shí)現(xiàn)呢?

1、首先,需要?jiǎng)?chuàng)建賬戶表bank,存放用戶張三和李四的賬戶信息。我們假設(shè)表結(jié)構(gòu)如圖

SQL Server 事務(wù)

2、賬戶表中要求賬戶余額不能少于一元,所以需要為字段currentMoney設(shè)置檢查約束,設(shè)置步驟如下。

首先,打開bank表的設(shè)計(jì)窗口,在currentMoney字段上右擊,在彈出的快捷菜單中選擇CHECK約束即可,

如圖表示:SQL Server 事務(wù)

3、然后,在打開的“CHECK 約束”對(duì)話框中,單機(jī)“添加”按鈕,修改約束名稱,并編輯檢查約束表達(dá)式即可,

如圖SQL Server 事務(wù)

SQL Server 事務(wù)SQL Server 事務(wù)

4、如何解決呢?使用事務(wù),轉(zhuǎn)賬過程就是一個(gè)事務(wù),它需要兩條UPDATE語句來完成,這兩條語句是一個(gè)整體。

如果其中任何一條出現(xiàn)錯(cuò)誤,則整個(gè)轉(zhuǎn)賬業(yè)務(wù)也應(yīng)取消,兩個(gè)賬戶中的余額應(yīng)恢復(fù)到原來的數(shù)據(jù),從而確保轉(zhuǎn)賬

前和轉(zhuǎn)賬后的余額總和不變,即1001元。

5、理論:

a、什么是事務(wù)?

概念

事務(wù)是一個(gè)不可分割的工作邏輯單元,包括一組命令,這組命令要么都執(zhí)行,要么都不執(zhí)行。

b、屬性

原子性:事務(wù)是一個(gè)完整的操作。事務(wù)的各元素是不可分的。

一致性:當(dāng)事務(wù)完成時(shí),數(shù)據(jù)必須處于一致狀態(tài)。

隔離性:事務(wù)是獨(dú)立的,它不以任何方式依賴于或影響其他事務(wù)。

持久性:一旦事務(wù)被提交,事務(wù)的效果會(huì)被永久的保留在數(shù)據(jù)庫中。

6、如何執(zhí)行事務(wù)

a、執(zhí)行事務(wù)的語法

開始事務(wù):BEGIN TRANSACTION

提交事務(wù):COMMIT TRANSACTION

回滾(撤銷)事務(wù):ROLLBACK TRANSACTION

7、事務(wù)應(yīng)用實(shí)例

下面我們來應(yīng)用事務(wù)來解決上述轉(zhuǎn)賬問題,T=SQL語句如下。

print '查看轉(zhuǎn)賬事務(wù)前的余額'

select * from bank 

go

begin transaction

declare @errorsum int

set @errorsum =0

update bank set customermoney =customermoney -1000

where customername ='張三'

set @errorsum =@errorsum +@@ERROR 

update bank set customermoney =customermoney +1000

where customername ='李四'

set @errorsum =@errorsum +@@ERROR 

print '查看轉(zhuǎn)賬事務(wù)過程中的余額'

select * from bank 

if @errorsum <>0

begin

print '交易失敗,回滾事物'

rollback transaction

end

else

begin

print '交易成功,提交事務(wù),寫入鍵盤,永久保存'

commit transaction 

end 

go

print '查看轉(zhuǎn)賬事務(wù)后的余額'

select * from bank 

go 

交易失敗:

SQL Server 事務(wù)

交易成功:

SQL Server 事務(wù)

8、

認(rèn)識(shí)鎖

什么是鎖

用于多用戶環(huán)境下保證數(shù)據(jù)庫完整性和一致性。

鎖的模式

共享鎖(S鎖)

用于讀取數(shù)據(jù)。擁有共享鎖的資源不能被修改。

排他鎖(X鎖)

用于數(shù)據(jù)修改。與其他任何鎖都不兼容。

更新鎖(U鎖)

用于讀取和修改。與S鎖兼容,不影響讀??;與U鎖不兼容,避免死鎖

如何查看鎖

使用sys.dm_tran_locks動(dòng)態(tài)管理視圖

使用Profiler來捕捉鎖信息

9、認(rèn)識(shí)死鎖          SQL Server 事務(wù)

死鎖形成的條件:

互斥條件

請(qǐng)求和等待條件

不剝奪條件

環(huán)路等待條件

預(yù)防死鎖:

破壞互斥條件

破壞請(qǐng)求和等待條件

破壞不剝奪條件


網(wǎng)站標(biāo)題:SQLServer事務(wù)
地址分享:http://weahome.cn/article/jsccsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部