數(shù)據(jù)庫(kù)系統(tǒng)概論10_第1頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論10_第2頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論10_第3頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論10_第4頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論10_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論視圖、事務(wù)視圖、事務(wù)主講:劉志鵬主講:劉志鵬2Hello View! select * from my_contacts natural join job_current; create view mc as (select * from my_contacts natural join job_current); select * from mc;3視圖視圖(View) 數(shù)據(jù)庫(kù)中的視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫(kù)中以存儲(chǔ)的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來(lái)自由定義視圖的查詢所引用的表,并且

2、在引用視圖時(shí)動(dòng)態(tài)生成。4 1.從用戶角度來(lái)看,一個(gè)視圖是從一個(gè)特定的角度來(lái)查看數(shù)據(jù)庫(kù)中的數(shù)據(jù)。 2.從數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)部來(lái)看,一個(gè)視圖是由SELECT語(yǔ)句組成的查詢定義的虛擬表,是由一張或多張表中的數(shù)據(jù)組成的。 3.從數(shù)據(jù)庫(kù)系統(tǒng)外部來(lái)看,視圖就如同一張表一樣,對(duì)表能夠進(jìn)行的一般操作都可以應(yīng)用于視圖,例如查詢,插入,修改,刪除操作等。5視圖的作用視圖的作用 1.簡(jiǎn)單性簡(jiǎn)單性 看到的就是需要的。視圖不僅可以簡(jiǎn)化用戶對(duì)數(shù)據(jù)的理解,也可以簡(jiǎn)化他們的操作。那些被經(jīng)常使用的查詢可以被定義為視圖,從而使得用戶不必為以后的操作每次指定全部的條件。6 2.安全性安全性 通過(guò)視圖用戶只能查詢和修改他們所能見到的數(shù)據(jù)。

3、數(shù)據(jù)庫(kù)中的其它數(shù)據(jù)則既看不見也取不到。數(shù)據(jù)庫(kù)授權(quán)命令可以使每個(gè)用戶對(duì)數(shù)據(jù)庫(kù)的檢索限制到特定的數(shù)據(jù)庫(kù)對(duì)象上,但不能授權(quán)到數(shù)據(jù)庫(kù)特定行和特定的列上。通過(guò)視圖,用戶可以被限制在數(shù)據(jù)的不同子集上。 3.邏輯數(shù)據(jù)獨(dú)立性邏輯數(shù)據(jù)獨(dú)立性 視圖可幫助用戶屏蔽真實(shí)表結(jié)構(gòu)變化帶來(lái)的影響。7事務(wù)事務(wù) 數(shù)據(jù)庫(kù)事務(wù)(Database Transaction) ,是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。 事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會(huì)永久更新面向數(shù)據(jù)的資源。通過(guò)將一組相關(guān)操作組合為一個(gè)要么全部成功要么全部失敗的單元,可以簡(jiǎn)化錯(cuò)誤恢復(fù)并使應(yīng)用程序更加可靠。一個(gè)邏輯工作單元要成為事務(wù),必須滿

4、足所謂的ACID(原子性、一致性、隔離性和持久性)特性。8時(shí)間時(shí)間賬戶賬戶A賬戶賬戶B從賬戶從賬戶A轉(zhuǎn)賬轉(zhuǎn)賬100元到賬戶元到賬戶B11000查詢賬戶查詢賬戶A余額余額 1000元元Select sum from A2900從賬戶從賬戶A中減去中減去100元元Update A set sum=9003100查詢賬戶查詢賬戶B余額余額100元元Select sum from B4200匯入?yún)R入B賬戶賬戶100元元Update B set sum=2005900200轉(zhuǎn)賬完成!轉(zhuǎn)賬完成!9時(shí)間時(shí)間賬戶賬戶A賬戶賬戶B從賬戶從賬戶A轉(zhuǎn)賬轉(zhuǎn)賬100元到賬戶元到賬戶B11000查詢賬戶查詢賬戶A余額余額

5、 1000元元Select sum from A2900從賬戶從賬戶A中減去中減去100元元Update A set sum=9003100查詢賬戶查詢賬戶B余額余額100元元Select sum from B4意外發(fā)生意外發(fā)生(如停電、網(wǎng)絡(luò)中斷等如停電、網(wǎng)絡(luò)中斷等),后面的更新賬戶,后面的更新賬戶B的的操作無(wú)法完成操作無(wú)法完成5系統(tǒng)恢復(fù)后系統(tǒng)恢復(fù)后6100查詢賬戶查詢賬戶B余額余額100元元Select sum from B7900查詢賬戶查詢賬戶A余額余額 900元元Select sum from A8賬戶賬戶A的的100元人間蒸發(fā)元人間蒸發(fā)10Hello Transaction! Set

6、 autocommit = 0; Start trasaction; Insert into . Insert into . Rollback;(Commit;)11原子性原子性 (Atomicity ) 原子性屬性用于標(biāo)識(shí)事務(wù)是否完全地完成,一個(gè)事務(wù)的任何更新要在系統(tǒng)上完全完成,如果由于某種原因出錯(cuò),事務(wù)不能完成它的全部任務(wù),系統(tǒng)將返回到事務(wù)開始前的狀態(tài)。12一致性一致性( Consistency ) 事務(wù)在系統(tǒng)完整性中實(shí)施一致性,這通過(guò)保證系統(tǒng)的任何事務(wù)最后都處于有效狀態(tài)來(lái)實(shí)現(xiàn)。如果事務(wù)成功地完成,那么系統(tǒng)中所有變化將正確地應(yīng)用,系統(tǒng)處于有效狀態(tài)。如果在事務(wù)中出現(xiàn)錯(cuò)誤,那么系統(tǒng)中的所有變化

7、將自動(dòng)地回滾,系統(tǒng)返回到原始狀態(tài)。因?yàn)槭聞?wù)開 始時(shí)系統(tǒng)處于一致狀態(tài),所以現(xiàn)在系統(tǒng)仍然處于一致狀態(tài)。13隔離性隔離性 ( Isolation) 在隔離狀態(tài)執(zhí)行事務(wù),使它們好像是系統(tǒng)在給定時(shí)間內(nèi)執(zhí)行的唯一操作。如果有兩個(gè)事務(wù),運(yùn)行在相同的時(shí)間內(nèi),執(zhí)行相同的功能,事務(wù)的隔離性將確保每一事務(wù)在 系統(tǒng)中認(rèn)為只有該事務(wù)在使用系統(tǒng)。 這種屬性有時(shí)稱為串行化,為了防止事務(wù)操作間的混淆,必須串行化或序列化請(qǐng)求,使得在同一時(shí)間僅有一個(gè)請(qǐng)求用于同一數(shù)據(jù)。14持久性持久性 (Durabilily) 持久性意味著一旦事務(wù)執(zhí)行成功,在系統(tǒng)中產(chǎn)生的所有變化將是永久的。應(yīng)該存在一些檢查點(diǎn)防止在系統(tǒng)失敗時(shí)丟失信息。甚至硬件本身

8、失敗,系統(tǒng)的狀態(tài)仍能通過(guò)在日志中記錄事務(wù)完成的任務(wù)進(jìn)行重建。持久性的概念允許開發(fā)者認(rèn)為不管系統(tǒng)以后發(fā)生了什么變化,完 成的事務(wù)是系統(tǒng)永久的部分。 15事務(wù)在并發(fā)時(shí)都會(huì)遇到那些問(wèn)題呢?事務(wù)在并發(fā)時(shí)都會(huì)遇到那些問(wèn)題呢? 我們先來(lái)看看數(shù)據(jù)庫(kù)并發(fā)操作時(shí)會(huì)有那些異常情形 161、第一類丟失更新(Lost update) 兩個(gè)事務(wù)都同時(shí)更新一行數(shù)據(jù),但是第二個(gè)事務(wù)卻中途失敗退出,導(dǎo)致對(duì)數(shù)據(jù)的兩個(gè)修改都失效了。 17時(shí)間時(shí)間取款事務(wù)取款事務(wù)A存款事務(wù)存款事務(wù)B1開始事務(wù)開始事務(wù)2開始事務(wù)開始事務(wù)3查詢賬戶余額為查詢賬戶余額為1000元元4查詢賬戶余額為查詢賬戶余額為1000元元5匯入?yún)R入100元把余額改為元

9、把余額改為1100元元6提交事務(wù)(提交事務(wù)(commit)7取出取出100把余額改為把余額改為900元元8撤銷事務(wù)撤銷事務(wù)(roll back)9余額恢復(fù)為余額恢復(fù)為1000元(元(丟失更新丟失更新)182、臟讀(Dirty Read) 一個(gè)事務(wù)開始讀取了某行數(shù)據(jù),但是另外一個(gè)事務(wù)已經(jīng)更新了此數(shù)據(jù)但沒(méi)有能夠及時(shí)提交。這是相當(dāng)危險(xiǎn)的,因?yàn)楹芸赡芩械牟僮鞫急换貪L。 19時(shí)間時(shí)間取款事務(wù)取款事務(wù)A存款事務(wù)存款事務(wù)B1開始事務(wù)開始事務(wù)2開始事務(wù)開始事務(wù)3查詢賬戶余額為查詢賬戶余額為1000元元4存入存入100元把余額改為元把余額改為1100元元5查詢賬戶余額為查詢賬戶余額為1100元元(讀取臟數(shù)據(jù)讀

10、取臟數(shù)據(jù))6撤銷事務(wù)撤銷事務(wù)(roll back)7取出取出11008提交事務(wù)失敗提交事務(wù)失敗203、不可重復(fù)讀(Non-repeatable Read) 一個(gè)事務(wù)對(duì)同一行數(shù)據(jù)重復(fù)讀取兩次,但是卻得到了不同的結(jié)果。同一查詢?cè)谕皇聞?wù)中多次進(jìn)行,由于其他提交事務(wù)所做的修改或刪除,每次返回不同的結(jié)果集,此時(shí)發(fā)生非重復(fù)讀。21時(shí)間時(shí)間取款事務(wù)取款事務(wù)A存款事務(wù)存款事務(wù)B1開始事務(wù)開始事務(wù)2開始事務(wù)開始事務(wù)3查詢賬戶余額為查詢賬戶余額為1000元元4查詢賬戶余額為查詢賬戶余額為1000元元5存入存入100元把余額改為元把余額改為1100元元6提交事務(wù)提交事務(wù)8查詢賬戶余額為查詢賬戶余額為1100元元9

11、提交事務(wù)提交事務(wù)224、二類丟失更新(Second lost update) 無(wú)法重復(fù)讀取的特例。有兩個(gè)并發(fā)事務(wù)同時(shí)讀取同一行數(shù)據(jù),然后其中一個(gè)對(duì)它進(jìn)行修改提交,而另一個(gè)也進(jìn)行了修改提交。這就會(huì)造成第一次寫操作失效。23時(shí)間時(shí)間取款事務(wù)取款事務(wù)A存款事務(wù)存款事務(wù)B1開始事務(wù)開始事務(wù)2開始事務(wù)開始事務(wù)3查詢賬戶余額為查詢賬戶余額為1000元元4查詢賬戶余額為查詢賬戶余額為1000元元5取出取出100元把余額改為元把余額改為900元元6提交事務(wù)提交事務(wù)8存入存入100元把余額改為元把余額改為1100元元(丟失更新)(丟失更新)9提交事務(wù)提交事務(wù)245、幻讀(Phantom Read) 事務(wù)在操作過(guò)

12、程中進(jìn)行兩次查詢,第二次查詢的結(jié)果包含了第一次查 詢中未出現(xiàn)的數(shù)據(jù)(這里并不要求兩次查詢的SQL語(yǔ)句相同)。這是因?yàn)樵趦纱尾樵冞^(guò)程中有另外一個(gè)事務(wù)插入數(shù)據(jù)造成的。 和不可重復(fù)讀的區(qū)別: 1.幻讀考慮的是插入和刪除的操作。 2.不可重復(fù)讀考慮的是更新操作。25時(shí)間時(shí)間查詢學(xué)生事務(wù)查詢學(xué)生事務(wù)A插入學(xué)生事務(wù)插入學(xué)生事務(wù)B1開始事務(wù)開始事務(wù)2開始事務(wù)開始事務(wù)3查詢學(xué)生人數(shù)查詢學(xué)生人數(shù)10人人4插入一個(gè)新學(xué)生插入一個(gè)新學(xué)生5查詢學(xué)生人數(shù)查詢學(xué)生人數(shù)11人人6提交事務(wù)提交事務(wù)9提交事務(wù)提交事務(wù)26三、數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)對(duì)事務(wù)并發(fā)時(shí)的隔離機(jī)制 為了兼顧并發(fā)效率和異??刂疲跇?biāo)準(zhǔn)SQL規(guī)范中,定義

13、了4個(gè)事務(wù)隔離級(jí)別 1、未提交讀(Read Uncommitted) 2、提交讀(Read Committed) 3、可重復(fù)讀(Repeatable Read) 4、串行讀(Serializable) 27未提交讀未提交讀(Read Uncommitted) 直譯就是讀未提交,意思就是即使一個(gè)更新語(yǔ)句沒(méi)有提交,但是別的事務(wù)可以讀到這個(gè)改變.這是很不安全的。允許任務(wù)讀取數(shù)據(jù)庫(kù)中未提交的數(shù)據(jù)更改,也稱為臟讀。 28提交讀(Read Committed) 直譯就是讀提交,可防止臟讀,意思就是語(yǔ)句提交以后即執(zhí)行了COMMIT以后 別的事務(wù)就能讀到這個(gè)改變. 只能讀取到已經(jīng)提交的數(shù)據(jù)。Oracle等多數(shù)數(shù)據(jù)庫(kù)默認(rèn)都是該級(jí)別 29可重復(fù)讀(Repeatable Read) 直譯就是可以重復(fù)讀,這是說(shuō)在同一個(gè)事務(wù)里面先后執(zhí)行同一個(gè)查詢語(yǔ)句的時(shí)候,得到的結(jié)果是一樣的.在同一個(gè)事務(wù)內(nèi)的查詢都是事務(wù)開始時(shí)刻一致的,InnoDB默認(rèn)級(jí)別。在SQL標(biāo)準(zhǔn)中,該隔離級(jí)別消除了不可重復(fù)讀,但是還存在幻象讀 30串行讀(Serializable) 直譯就是序列化,意思是

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論