版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)庫應(yīng)用與設(shè)計課程教案第4頁
第8講授課題目:第六章事務(wù)教學(xué)時數(shù):2學(xué)時授課類型:理論課□理論、實驗課□實踐課教學(xué)目的、要求:1、了解事務(wù)的概念以及事務(wù)的四大特性;2、掌握事務(wù)的開始、回滾以及提交方法;3、能用事務(wù)解決實際問題。教學(xué)重點:1、事務(wù)的開始、回滾以及提交方法;2、用事務(wù)解決實際問題教學(xué)難點:1、如何利用事務(wù)解決銀行轉(zhuǎn)賬出錯的問題,實現(xiàn)正確的轉(zhuǎn)賬過程。2、如何利用事務(wù)解決生活中其他實際問題教學(xué)方法和手段:1、教學(xué)方法:在教學(xué)中選用了大家都熟知的生活事例“銀行轉(zhuǎn)賬”,通過轉(zhuǎn)賬過程中出現(xiàn)賬戶金額錯誤,發(fā)現(xiàn)問題所在于update修改語句與check約束發(fā)生沖突,從而引出事務(wù),誘導(dǎo)學(xué)生利用事務(wù)去解決這類問題。教學(xué)中采用了“小組討論”,“學(xué)生探究”,“任務(wù)驅(qū)動”,“師生互動”等方法。2、教學(xué)手段:采用多媒體課件教學(xué)與板書相結(jié)合3、板書設(shè)計
教學(xué)內(nèi)容及過程旁批教學(xué)內(nèi)容與教學(xué)設(shè)計:環(huán)節(jié)一:知識回顧【課堂互動】(計劃用時4分鐘):教師與學(xué)生一起復(fù)習(xí)以前學(xué)習(xí)過的插入記錄和修改記錄語句,并用2個例子加深理解,為后面的創(chuàng)建事務(wù)打下基礎(chǔ)。插入記錄:INSERTINTO<table_name>[(<column1>[,<column2>…])]VALUES(<expression1>[,<expression2>]…)例:向SC表插入一條學(xué)號為S2,課程號為C2的記錄INSERTINTOSC(Sno,Cno)VALUES(‘S2’,'c2')修改記錄:UPDATE<表名>SET<字段名1>=<表達式1>[,<字段名2>=<表達式2>]…[WHERE<條件>]例:將李思轉(zhuǎn)到計算機系UPDATESSETDEPT=’計算機’WHERESN=’李思’環(huán)節(jié)二:本章重難點【教師引導(dǎo)】(計劃用時2分鐘):教師引導(dǎo)學(xué)生本章的主要內(nèi)容,以及本次課程需要掌握的重點和難點。1、事務(wù)的四大特性2、事務(wù)的開始、提交、回滾方法3、用事務(wù)解決銀行轉(zhuǎn)賬的問題環(huán)節(jié)三:案例引入【討論引入】(計劃用時2分鐘):教師描述大家都熟知的生活實例“銀行轉(zhuǎn)賬”,并提問:假定資金從帳戶A轉(zhuǎn)到帳戶B,至少需要幾步完成?銀行轉(zhuǎn)帳問題:假定將帳戶A的資金1000元轉(zhuǎn)到帳戶B中,至少需要幾步完成?1.帳戶A的資金減少1000元2.帳戶B的資金相應(yīng)增加1000元【課堂討論】(計劃用時2分鐘):問題1:轉(zhuǎn)賬之前必須先開戶,在數(shù)據(jù)庫中如何實現(xiàn)開戶?學(xué)生自由回答?!窘處熞龑?dǎo)】(計劃用時1分鐘):顧客在銀行開戶的過程,在數(shù)據(jù)庫中實現(xiàn)時,實際就是創(chuàng)建一張數(shù)據(jù)表,表中設(shè)置2個字段,分別存放需要開戶的顧客姓名和金額。利用以前學(xué)習(xí)過的知識和學(xué)生一起完成代碼:/*創(chuàng)建賬戶表:CREATETABLEbank(customerNameCHAR(10),/*顧客姓名currentMoneyMONEY/*當(dāng)前余額)GO【師生互動】(計劃用時1分鐘):問題2:此時創(chuàng)建的表格僅僅是表結(jié)構(gòu),沒有實際數(shù)據(jù),在數(shù)據(jù)庫中如何實現(xiàn)資金存入賬戶?學(xué)生回答:客戶資金入賬,就是使用Insert命令向bank表中插入數(shù)據(jù)。向bank表中插入數(shù)據(jù)語句為(計劃用時1分鐘):CREATETABLEbank(customerNameCHAR(10),/*顧客姓名currentMoneyMONEY/*當(dāng)前余額)GO【教師提問】(計劃用時2分鐘):問題3:表格雖然已經(jīng)創(chuàng)建完成,但是根據(jù)銀行規(guī)定,每個顧客帳戶余額不能少于1元,否則視為銷戶,為了保證不銷戶,怎樣限制賬戶余額>=1?師生共同分析:為了保證每位顧客余額大于等于1,我們需要在余額字段CurrentMoney上添加一個CHECK約束,來限制CurrentMoney字段值>=1即可教師演示完整代碼(計劃用時2分鐘):/*創(chuàng)建賬戶表:CREATETABLEbank(customerNameCHAR(10),/*顧客姓名currentMoneyMONEY/*當(dāng)前余額)GO/*添加約束:帳戶余額不能少于1元ALTERTABLEbankADDCONSTRAINTCK_currentMoneyCHECK(currentMoney>=1)GO/*張三開戶,開戶金額為1000元;李四開戶,開戶金額1元:INSERTINTObank(customerName,currentMoney)VALUES('張三',1000)INSERTINTObank(customerName,currentMoney)VALUES('李四',1)【教師系統(tǒng)演示】(計劃用時1分鐘):教師在數(shù)據(jù)庫軟件中演示成功創(chuàng)建bank表的過程,并向?qū)W生展示結(jié)果。教師展示創(chuàng)建成功的bank表結(jié)果?!窘處熖釂枴浚ㄓ媱澯脮r2分鐘):問題4:如何實現(xiàn)轉(zhuǎn)賬過程?教師引導(dǎo):請大家回想一下自己在銀行轉(zhuǎn)賬的時候,銀行卡里的數(shù)據(jù)是怎樣發(fā)生變化的?學(xué)生自由回答教師引導(dǎo):轉(zhuǎn)賬的過程是將張三賬戶的金額減少1000元,同時李四賬戶的金額增加1000元,在數(shù)據(jù)表中的處理過程實際就是使用update語句對currentmoney字段的值做修改操作。具體代碼如下(計劃用時1分鐘):UPDATEbankSETcurrentMoney=currentMoney-1000WHEREcustomerName='張三'UPDATEbankSETcurrentMoney=currentMoney+1000WHEREcustomerName='李四'環(huán)節(jié)四:發(fā)現(xiàn)問題【教師系統(tǒng)演示】(計劃用時4分鐘):教師在數(shù)據(jù)庫軟件中模擬實現(xiàn)轉(zhuǎn)帳過程,并向?qū)W生展示結(jié)果。教師模擬實現(xiàn)轉(zhuǎn)帳過程:從張三的帳戶轉(zhuǎn)帳1000元到李四的帳戶,轉(zhuǎn)帳之前,余額總和為:1000+1=1001元,轉(zhuǎn)帳之后,余額總和為:1000+1001=2001元,總額多出了1000元!環(huán)節(jié)五:分析問題【師生共同分析】(計劃用時4分鐘):教師和學(xué)生根據(jù)錯誤結(jié)果以及系統(tǒng)報錯提示一起分析錯誤原因師生共同分析錯誤原因:通過報錯提示得出update修改語句與check約束發(fā)生沖突,為什么會發(fā)生沖突呢?修改張三金額的第一個update語句將張三余額變?yōu)?,而根據(jù)銀行規(guī)定,帳戶余額不能少于1元,否則視為銷戶,所以,第一個update語句違反了check約束:余額>=1元,即第一個update語句沒有執(zhí)行,也就是張三的的金額并沒有減少1000元。環(huán)節(jié)六:解決問題(重點)【教師提問】(計劃用時2分鐘):問題5:通過剛才分析,我們已經(jīng)找到了錯誤原因,那么如何解決呢?概念引入:使用事務(wù)!教師講解:教師詳細講解事務(wù)的概念、事務(wù)的四大特性、事務(wù)的創(chuàng)建方法1、事務(wù)的概念(計劃用時4分鐘)事務(wù)(TRANSACTION):是作為單個邏輯工作單元執(zhí)行的一系列操作,這些操作作為一個整體一起向系統(tǒng)提交,要么都執(zhí)行、要么都不執(zhí)行。事務(wù)是一個不可分割的工作邏輯單元。2、事務(wù)的四大特性(計劃用時5分鐘)原子性(Atomicity):事務(wù)是一個完整的操作。事務(wù)的各步操作是不可分的(原子的);要么都執(zhí)行,要么都不執(zhí)行一致性(Consistency):當(dāng)事務(wù)完成時,數(shù)據(jù)必須處于一致狀態(tài)隔離性(Isolation):對數(shù)據(jù)進行修改的所有并發(fā)事務(wù)是彼此隔離的,它不應(yīng)以任何方式依賴于或影響其他事務(wù)永久性(Durability):事務(wù)完成后,它對數(shù)據(jù)庫的修改被永久保持。3、T-SQL使用下列語句來管理事務(wù)(計劃用時4分鐘)開始事務(wù):BEGINTRANSACTION提交事務(wù):COMMITTRANSACTION回滾(撤銷)事務(wù):ROLLBACKTRANSACTION【課堂討論】(計劃用時5分鐘):問題6:我們已經(jīng)詳細學(xué)習(xí)了事務(wù)的基本原理,那么,怎么樣利用事務(wù)解決的錯誤銀行轉(zhuǎn)帳問題?學(xué)生討論回答:轉(zhuǎn)帳過程就是一個事務(wù)。它需要兩條UPDATE語句來完成,這兩條語句是一個整體,如果其中任一條出現(xiàn)錯誤,則整個轉(zhuǎn)帳業(yè)務(wù)也應(yīng)取消,兩個帳戶中的余額應(yīng)恢復(fù)到原來的數(shù)據(jù),從而確保轉(zhuǎn)帳前和轉(zhuǎn)帳后的余額不變,即都是1001元。教師對關(guān)鍵語句講解(計劃用時9分鐘)BEGINTRANSACTION/*--定義變量,用于累計事務(wù)執(zhí)行過程中的錯誤--*/DECLARE@errorSumINTSET@errorSum=0/*--初始化為0,即無錯誤/*--轉(zhuǎn)帳:張三的帳戶少1000元,李四的帳戶多1000元*/UPDATEbankSETcurrentMoney=currentMoney-1000WHEREcustomerName='張三'SET@errorSum=@errorSum+@@errorUPDATEbankSETcurrentMoney=currentMoney+1000WHEREcustomerName='李四'SET@errorSum=@errorSum+@@error/*--累計是否有錯誤IF@errorSum<>0/*--如果有錯誤BEGINprint'交易失敗,回滾事務(wù)'ROLLBACKTRANSACTIONENDELSEBEGINprint'交易成功,提交事務(wù),寫入硬盤,永久的保存'COMMITTRANSACTIONENDGOprint'查看轉(zhuǎn)帳事務(wù)后的余額'SELECT*FROMbankGO過程分析(計劃用時7分鐘):1、開戶后并開始事務(wù),定義變量@errorSum,用于累計事務(wù)執(zhí)行過程中的錯誤;2、使用兩個update語句實現(xiàn)轉(zhuǎn)帳:張三的帳戶少1000元,李四的帳戶多1000元;3、張三賬戶減少1000元后,使用@errorSum變量計算出執(zhí)行過程中的錯誤個數(shù),同理,李四賬戶增加1000元后,繼續(xù)使用@errorSum變量累計計算出執(zhí)行過程中的錯誤個數(shù);4、使用雙分支語句去判斷@errorSum的最終值,如果@errorSum<>0,說明有錯誤,則回滾事務(wù)ROLLBACKTRANSACTION,否則,說明沒有錯誤,則提交事務(wù)COMMITTRANSACTION?!窘處熛到y(tǒng)演示】(計劃用時5分鐘):教師在數(shù)據(jù)庫軟件中模擬實現(xiàn)轉(zhuǎn)帳過程,向?qū)W生展示轉(zhuǎn)賬1000元和800元的結(jié)果,并做對比分析。教師將轉(zhuǎn)帳1000元失敗的情況與成功轉(zhuǎn)賬轉(zhuǎn)帳800元的情況做對比分析,讓學(xué)生了解使用事務(wù)執(zhí)行過程的區(qū)別。轉(zhuǎn)賬1000元失敗的情況:轉(zhuǎn)賬800元成功的情況:【教師對比分析】(計劃用時4分鐘):教師在黑板上演示對比分析過程:我們將利用事務(wù)轉(zhuǎn)賬和沒有利用事務(wù)轉(zhuǎn)賬的結(jié)果做了對比分析,得出沒有利用事務(wù)轉(zhuǎn)賬時,兩條update語句只執(zhí)行了第一條,所以導(dǎo)致了錯誤的轉(zhuǎn)賬結(jié)果;而利用事務(wù)轉(zhuǎn)賬后,兩條update都沒有執(zhí)行,事務(wù)回滾到開始狀態(tài),所以得到正確的轉(zhuǎn)賬結(jié)果。環(huán)節(jié)七:知識小結(jié)【教師總結(jié)】(計劃用時5分鐘)今天所學(xué)的主要知識點:a.事務(wù)的概念b.事務(wù)的特性:原子性一致性隔離性持久性c.如何創(chuàng)建事務(wù):開始事務(wù):BEGINTRANSACTION回滾(撤銷)事務(wù):ROLLBACKTRANSACTION提交事務(wù):COMMITTRANSACTION2、我們將利用事務(wù)轉(zhuǎn)賬和沒有利用事務(wù)轉(zhuǎn)賬的結(jié)果做了對比分析,得出沒有利用事務(wù)轉(zhuǎn)賬時,兩條update語句只執(zhí)行了第一條,所以導(dǎo)致了錯誤的轉(zhuǎn)賬結(jié)果;而利用事務(wù)轉(zhuǎn)賬后,兩條update都沒有執(zhí)行,事務(wù)回滾到開始狀態(tài),所以得到正確的轉(zhuǎn)賬結(jié)果。3、在使用事務(wù)的時候,值得注意的是,開始事務(wù)語句begintransaction必須要定義在所有的操作開始之前,這樣才能保證事務(wù)能夠回滾到開始狀態(tài)。環(huán)節(jié)八:課堂練習(xí)【學(xué)生分組練習(xí)】(計劃用時8分鐘):教師在數(shù)據(jù)庫軟件中演示程序,引導(dǎo)學(xué)生分組對程序功能進行分析,讓學(xué)生回答此程序的功能和運行結(jié)果,以及使用了數(shù)據(jù)庫的哪些知識點。【教師演示程序】use
BankSystem
use
master
go
create
DataBase
BankSystem
go
use
BankSystem
go
create
table
CardInfo
(
PKID
int
identity(1,1)
primary
key
,
CardNum
nvarchar(19)
not
null,
--卡號
Balance
money
default(0)
--余額
)
go
create
table
Transfer_Event
(
PKID
int
identity(1,1)
primary
key,
FromCardID
nvarchar(19)
not
null,
--源卡號
ToCardID
nvarchar(19)
not
null,
--目標卡號
TransMoney
money,
--金額
OccurTime
datetime
--發(fā)生時間
)
insert
into
CardInfo(CardNum,Balance)
values('123456789',80.8)
insert
into
CardInfo(CardNum,Balance)
values('123',10.9)
go
create
procedure
TranserMoney
(
@fromCardNum
varchar(19),
@toCardNum
varchar(19),
@tansMoney
Money,
@occurTime
DateTime
)
as
begin
declare
@cardNum
varchar(19)
declare
@balance
Money
--開始事務(wù)
begin
transaction
--定義游標
declare
cursorTransfer
cursor
for
select
CardNum,Balance
from
CardInfo
where
CardNum=@fromCardNum
open
cursorTransfer
--取字段值,放入@cardNum,@balance
fetch
next
from
cursorTransfer
into
@cardNum,@balance
while
@@FETCH_STATUS=0
--取游標狀態(tài)(0--表示成功)
begin
if(@balance>=@tansMoney)
begin
update
CardInfo
set
Balance=Balance-@tansMoney
where
CardNum=@fromCardNum
if
@@ERROR<>0
goto
ERR
--發(fā)生錯誤跳轉(zhuǎn)
update
CardInfo
set
Balance=Balance+@tansMoney
where
CardNum=@toCardNum
if
@@ERROR<>0
goto
ERR
insert
into
Transfer_Event(FromCardID,ToCardID,TransMoney,OccurTime)values(@fromCardNum,@toCardNum,@tansMoney,@occurTime)
if
@@ERROR<>0
goto
ERR
commit
transaction
close
cursorTransfer
-
deallocate
cursorTransfer
return
0
返回0
end
else
begin
rollback
transaction
--回滾事務(wù)
close
cursorTransfer
--關(guān)閉游標
deallocate
cursorTransfer
return
1
--執(zhí)行正常,返回0
end
end
end
ERR:--發(fā)生異常返回2
begin
rollback
transaction
--回滾事務(wù)
close
cursorTransfer
deallocate
cursorTransfer
return
2
end
go
--調(diào)用存儲過程
declare
@fromCardNum
nvarchar(19),@toCardNum
nvarchar(19),@money
money,@dateTime
DateTime,@flag
int
set
@fromCardNum='123456789'
set
@toCardNum='123'
set
@dateTime='2009-7-17'
set
@money=50
exec
@flag=
TranserMoney
@fromCardNum,@toCardNum,@money,@dateTime
select
@flag
select
*from
CardInfo;
select
*from
Transfer_Event;
【結(jié)束本次課的結(jié)語】(計劃用時2分鐘)通過本次課程的學(xué)習(xí),我們掌握了事務(wù)的概念;事務(wù)的四大特性:原子性、一致性、隔離性、持久性;以及創(chuàng)建事務(wù)的方法:開始事務(wù):Begintransaction、回滾(撤銷)事務(wù):Rollbacktransaction、提交事務(wù):Committransaction。同時,本次課程我們還學(xué)會
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年子女撫養(yǎng)權(quán)確定及共同財產(chǎn)分割離婚協(xié)議3篇
- 2024年度網(wǎng)絡(luò)安全風(fēng)險評估與應(yīng)急響應(yīng)合同3篇
- 2024年國際貿(mào)易公司人員借調(diào)及國際商務(wù)合作合同3篇
- 2024年海上貨物運輸公約下的貨物跟蹤與查詢合同3篇
- 2024年度汽車經(jīng)銷商車輛銷售擔(dān)保合同模板3篇
- 2024商鋪租賃意向協(xié)議:兒童游樂場合作意向書3篇
- 2024版二手房買賣合同空白二零二四年度附帶車位產(chǎn)權(quán)交易3篇
- 2024年度外賣騎手服務(wù)規(guī)范與勞動權(quán)益保護合同3篇
- 2024年度農(nóng)產(chǎn)品加工合同:雞鴨產(chǎn)品深加工與包裝設(shè)計協(xié)議3篇
- 2024年涂漆作業(yè)分包協(xié)議參考格式版B版
- 中國成人失眠診斷與治療指南(2023版)解讀
- 解析德意志意識形態(tài)中的難解之謎生產(chǎn)關(guān)系概念與交往形式等術(shù)語的關(guān)系
- 皮膚疾病超聲檢查指南(2022版)
- 國開機考答案-工程力學(xué)(本)(閉卷)
- 2024醫(yī)院護士聘用合同
- 錢轉(zhuǎn)入別人帳戶協(xié)議書
- 《公路工程集料試驗規(guī)程》JTG-3432-2024考核試題及答案文檔
- 血液透析疑難病例討論
- 地基處理方案選擇案例分析
- 會計信息化習(xí)題+答案
- 急診科夜班護士準入制度
評論
0/150
提交評論