數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用(4)ppt課件_第1頁
數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用(4)ppt課件_第2頁
數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用(4)ppt課件_第3頁
數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用(4)ppt課件_第4頁
數(shù)據(jù)庫系統(tǒng)原理與應(yīng)用(4)ppt課件_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、nT-SQL程序設(shè)計根底程序設(shè)計根底n控制流語句控制流語句n函數(shù)函數(shù)n關(guān)系數(shù)據(jù)庫規(guī)范化實際關(guān)系數(shù)據(jù)庫規(guī)范化實際n函數(shù)依賴函數(shù)依賴n函數(shù)依賴的根本定義函數(shù)依賴的根本定義 / 完全函數(shù)依賴完全函數(shù)依賴 / 部部分函數(shù)依賴分函數(shù)依賴 / 傳送函數(shù)依賴傳送函數(shù)依賴/互為函數(shù)依互為函數(shù)依賴賴n范式和規(guī)范化范式和規(guī)范化n第一范式第一范式 /第二范式第二范式 /第三范式第三范式 /BCNF范范式式各范式及規(guī)范化過程 1NF2NF3NFBCNF消除非主屬性對關(guān)鍵消除非主屬性對關(guān)鍵字的部分函數(shù)依賴字的部分函數(shù)依賴消除非主屬性對關(guān)鍵消除非主屬性對關(guān)鍵字的傳送函數(shù)依賴字的傳送函數(shù)依賴消除主屬性對關(guān)鍵字的消除主屬性對

2、關(guān)鍵字的部分和傳送函數(shù)依賴部分和傳送函數(shù)依賴W 工號,工種,定額tf結(jié)論:關(guān)系方式的分解,既要有無損的銜接性,又必需結(jié)論:關(guān)系方式的分解,既要有無損的銜接性,又必需堅持函數(shù)依賴。堅持函數(shù)依賴。此關(guān)系存在傳送依賴,有三種分解方案:設(shè)關(guān)系方式設(shè)關(guān)系方式R,假設(shè)把它分解為兩個或多,假設(shè)把它分解為兩個或多個子方式個子方式R1和和R2,相應(yīng)一個,相應(yīng)一個R關(guān)系中的關(guān)系中的數(shù)據(jù)就要被分成數(shù)據(jù)就要被分成R1 、R2兩個或多個兩個或多個子表。假設(shè)將這些子表自然銜接,即進(jìn)展子表。假設(shè)將這些子表自然銜接,即進(jìn)展R1R2操作,得到的結(jié)果與原來關(guān)系中的操作,得到的結(jié)果與原來關(guān)系中的數(shù)據(jù)一致,信息并沒有喪失,那么稱該分

3、數(shù)據(jù)一致,信息并沒有喪失,那么稱該分解具有無損銜接性,否那么假設(shè)解具有無損銜接性,否那么假設(shè)RR1R2,那么稱該分解不具有無損銜接性。那么稱該分解不具有無損銜接性。輸入:關(guān)系方式輸入:關(guān)系方式R(A1,A2,An),函數(shù)依賴集函數(shù)依賴集FR的分解的分解=R1,R2,Rk輸出輸出 :確定:確定能否具有無損?能否具有無損?算法:算法:1構(gòu)造一構(gòu)造一k行行n列的表,第列的表,第i行對應(yīng)于關(guān)系方式行對應(yīng)于關(guān)系方式Ri,第第j列對應(yīng)屬性列對應(yīng)屬性Aj。如。如AjRi,那么第,那么第i行行j列上放列上放符號符號ai,否那么放,否那么放bij。2逐個檢查逐個檢查F中的函數(shù)依賴,如函數(shù)依賴中的函數(shù)依賴,如函數(shù)

4、依賴XY,那,那么在么在X的分量中找一樣的行,將這些行中的分量中找一樣的行,將這些行中Y的分量的分量改為一樣的符號,假設(shè)有改為一樣的符號,假設(shè)有aj那么將那么將bij改為改為aj,假,假設(shè)無設(shè)無aj,那么改為,那么改為bij。3反復(fù)進(jìn)展第反復(fù)進(jìn)展第2步步 ,假設(shè)某行變成,假設(shè)某行變成a1,a2,ak,那么那么能否具有無損。能否具有無損。1 1構(gòu)造一個構(gòu)造一個k k行行n n列表列表S S,其中:,其中:2 2根據(jù)函數(shù)依賴集根據(jù)函數(shù)依賴集F F進(jìn)展修正:進(jìn)展修正:XYXY3 3判別條件:判別條件:一、數(shù)據(jù)匯總1.聚合函數(shù)聚合函數(shù) 聚合函數(shù)只能在以下項中允許作為表達(dá)式聚合函數(shù)只能在以下項中允許作為

5、表達(dá)式運用:運用:SELECT語句的選擇列表語句的選擇列表COMPUTE或或COMPUTE BY子句子句HAVING子句子句COMPUTE生成兩個分別的結(jié)果集生成兩個分別的結(jié)果集例:例:SELECT sno,cno,degree FROM score WHERE sno in (103,105) ORDER BY sno COMPUTE SUM(degree)明細(xì)行集明細(xì)行集聚合函數(shù)的合計,聚合函數(shù)的合計,只需一行只需一行COMPUTE BY對符合條件的每個組生成兩結(jié)果集對符合條件的每個組生成兩結(jié)果集例:例:SELECT sno,cno,degree FROM score WHERE sno

6、in (103,105) ORDER BY sno COMPUTE SUM(degree) BY sno第一組明細(xì)行集第一組明細(xì)行集第一組聚合函數(shù)的第一組聚合函數(shù)的合計,只需一行合計,只需一行第二組明細(xì)行集第二組明細(xì)行集第二組聚合函數(shù)的第二組聚合函數(shù)的合計,只需一行合計,只需一行2.GROUP BY 子句子句 GROUP BY子句用來為結(jié)果集中的每一行子句用來為結(jié)果集中的每一行產(chǎn)生聚合值。留意,選擇列表中任一非聚合產(chǎn)生聚合值。留意,選擇列表中任一非聚合表達(dá)式內(nèi)的一切列都應(yīng)包含在表達(dá)式內(nèi)的一切列都應(yīng)包含在GROUP BY列列表中。表中。CUBE將在結(jié)果集中前往每個能夠的組和子組組將在結(jié)果集中前往

7、每個能夠的組和子組組合的合的GROUP BY匯總行。匯總行。例:例:SELECT s.sclass AS 班號班號,came AS 課程課程, AVG(sc.degree) AS 平均分平均分 FROM student s,course c,score sc WHERE s.sno=sc.sno and co=sco GROUP BY s.sclass,came WITH CUBECUBE將在結(jié)果集中前往每個能夠的組和子組組合將在結(jié)果集中前往每個能夠的組和子組組合的的GROUP BY匯總行。匯總行。95033班的平均分95031班的平均分計算機(jī)導(dǎo)論平均分操作系統(tǒng)的平均分?jǐn)?shù)字電路的平均分一切班一

8、切課的平均分ROLLUP將在結(jié)果集包含匯總行,按層次構(gòu)造將在結(jié)果集包含匯總行,按層次構(gòu)造順序,從組內(nèi)的最低級別到最高級別匯總組。順序,從組內(nèi)的最低級別到最高級別匯總組。例:例:SELECT s.sclass AS 班號班號,came AS 課程課程,AVG(sc.degree) AS 平均分平均分FROM student s,course c,score sc WHERE s.sno=sc.sno and co=sco GROUP BY s.sclass,came WITH ROLLUPROLLUP將在結(jié)果集包含匯總行,按層次構(gòu)造順序,將在結(jié)果集包含匯總行,按層次構(gòu)造順序,從組內(nèi)的最低級別到最

9、高級別匯總組。從組內(nèi)的最低級別到最高級別匯總組。95033班的平均分95031班的平均分一切班一切課的平均分二、銜接查詢 當(dāng)對兩個以上的表進(jìn)展查詢時,就需求把這些表當(dāng)對兩個以上的表進(jìn)展查詢時,就需求把這些表銜接起來??梢杂勉暯悠饋怼?梢杂肍ROM或或WHERE子句指定銜接。子句指定銜接。SELECT 表名表名1 .字段名字段名, 表名表名2.字段名字段名.FROM 表表1 , 表表2 WHERE 表表1.銜接字段名銜接字段名 = 表表2.銜接字段名銜接字段名SELECT 表名表名1 .字段名字段名, 表名表名2.字段名字段名.FROM 表表1 JOIN 表表2 ON 表表1.銜接字段名銜接字段

10、名 = 表表2.銜接字段名銜接字段名1.內(nèi)銜接內(nèi)銜接SELECT 學(xué)生表學(xué)生表.*,成果表成果表.*FROM 學(xué)生表學(xué)生表 INNER JOIN 成果表成果表ON 學(xué)生表學(xué)生表.學(xué)號學(xué)號=成果表成果表.學(xué)號學(xué)號學(xué)生表成果表結(jié)果2.外銜接外銜接左銜接左銜接SELECT 學(xué)生表學(xué)生表.*,成果表成果表.*FROM 學(xué)生表學(xué)生表 LEFT JOIN 成果表成果表ON 學(xué)生表學(xué)生表.學(xué)號學(xué)號=成果表成果表.學(xué)號學(xué)號學(xué)生表成果表結(jié)果2.外銜接外銜接右銜接右銜接SELECT 學(xué)生表學(xué)生表.*,成果表成果表.*FROM 學(xué)生表學(xué)生表 RIGHT JOIN 成果表成果表ON 學(xué)生表學(xué)生表.學(xué)號學(xué)號=成果表成果

11、表.學(xué)號學(xué)號學(xué)生表成果表結(jié)果2.外銜接外銜接全銜接全銜接SELECT 學(xué)生表學(xué)生表.*,成果表成果表.*FROM 學(xué)生表學(xué)生表 FULL JOIN 成果表成果表ON 學(xué)生表學(xué)生表.學(xué)號學(xué)號=成果表成果表.學(xué)號學(xué)號學(xué)生表成果表結(jié)果3.交叉銜接交叉銜接就是笛卡爾積就是笛卡爾積SELECT 學(xué)生表學(xué)生表.*,成果表成果表.*FROM 學(xué)生表學(xué)生表 CROSS JOIN 成果表成果表學(xué)生表成果表結(jié)果三、子查詢 子查詢可嵌套在子查詢可嵌套在SELECT、INSERT、UPDATE、DELETE語句中。語句中。 子查詢的子查詢的SELECT查詢要用查詢要用()括起來,且不能包含括起來,且不能包含COMPU

12、TE語句。語句。 有三種常用的子查詢:有三種常用的子查詢:經(jīng)過經(jīng)過IN引入的列表或由引入的列表或由ANY或或ALL修正的比較運算符的修正的比較運算符的列表上進(jìn)展操作列表上進(jìn)展操作經(jīng)過不修正數(shù)據(jù)的比較運算符引入,必需前往單個值經(jīng)過不修正數(shù)據(jù)的比較運算符引入,必需前往單個值經(jīng)過經(jīng)過EXISTS引入的存在測試引入的存在測試?yán)翰樵儾僮飨到y(tǒng)的任課教師例:查詢操作系統(tǒng)的任課教師SELECT tname FROM teacher WHERE tno=(SELECT tno FROM course WHERE cname=操作系操作系統(tǒng)統(tǒng))SELECT teacher.tname FROM teacher

13、JOIN course ON teacher.tno=course.tno WHERE cname=操作系統(tǒng)操作系統(tǒng)前往一個值的子查詢前往一個值的子查詢例:列出成果表中例:列出成果表中,選修過學(xué)號選修過學(xué)號“97101000的學(xué)生所選課程的一切成果的學(xué)生所選課程的一切成果SELECT * FROM 成果表成果表 WHERE 課程編號課程編號 IN (SELECT 課程編號課程編號 FROM 成果表成果表 WHERE 學(xué)號學(xué)號=97101000 )前往多個值的子查詢前往多個值的子查詢例:查詢最高分的學(xué)生姓名例:查詢最高分的學(xué)生姓名 SELECT sname FROM student WHERE

14、sno= (SELECT sno FROM score WHERE degree = (SELECT MAX(degree) FROM score ) )多層嵌套多層嵌套例:刪除例:刪除course中沒有被選修過的課程中沒有被選修過的課程 DELETE course WHERE cno NOT IN (SELECT cno FROM score) DELETE中的子查詢中的子查詢四、數(shù)據(jù)來源是一個查詢的結(jié)果 查詢語句的查詢語句的FROM中可以是表,也可以是中可以是表,也可以是一個查詢結(jié)果。一個查詢結(jié)果。例:例:SELECT cno,avgs FROM (SELECT cno,AVG(degre

15、e) avgs FROM score GROUP BY cno) T ORDER BY avgs DESC引入事務(wù)處置引入事務(wù)處置設(shè)銀行數(shù)據(jù)庫中有一轉(zhuǎn)賬設(shè)銀行數(shù)據(jù)庫中有一轉(zhuǎn)賬事務(wù)事務(wù)Ti,從賬號,從賬號A轉(zhuǎn)一筆款子轉(zhuǎn)一筆款子50到賬到賬號號B,其操作如下:,其操作如下: Ti: readA; A:A-50; writeA; readB; B: B50; writeB構(gòu)成一個邏輯任務(wù)單位的數(shù)據(jù)庫操作集合,構(gòu)成一個邏輯任務(wù)單位的數(shù)據(jù)庫操作集合,稱為稱為“事務(wù)事務(wù)transaction。事務(wù)具有事務(wù)具有ACID性質(zhì):性質(zhì):原子性原子性Atomicity 一個事務(wù)中一切對數(shù)據(jù)庫的操作,是一一個事務(wù)中一

16、切對數(shù)據(jù)庫的操作,是一個不可分割的操作序列。這些操作要么全個不可分割的操作序列。這些操作要么全部執(zhí)行,要么什么也不做。部執(zhí)行,要么什么也不做。一致性一致性Consistency 一個事務(wù)獨立執(zhí)行的結(jié)果,將堅持?jǐn)?shù)據(jù)一個事務(wù)獨立執(zhí)行的結(jié)果,將堅持?jǐn)?shù)據(jù)庫的一致性,即數(shù)據(jù)不會因事務(wù)的執(zhí)行而庫的一致性,即數(shù)據(jù)不會因事務(wù)的執(zhí)行而蒙受破壞,數(shù)據(jù)庫只包含勝利事務(wù)提交的蒙受破壞,數(shù)據(jù)庫只包含勝利事務(wù)提交的結(jié)果,不包含尚未完成就被迫中斷的事務(wù)結(jié)果,不包含尚未完成就被迫中斷的事務(wù)提交的結(jié)果。提交的結(jié)果。隔離性隔離性Isolation 一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾,它一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾,它的內(nèi)部的操

17、作及運用的數(shù)據(jù)對其它并發(fā)事務(wù)是的內(nèi)部的操作及運用的數(shù)據(jù)對其它并發(fā)事務(wù)是隔離的,這樣,并發(fā)執(zhí)行的各個事務(wù)之間不能隔離的,這樣,并發(fā)執(zhí)行的各個事務(wù)之間不能相互關(guān)擾,好像在單用戶環(huán)境下執(zhí)行一樣。相互關(guān)擾,好像在單用戶環(huán)境下執(zhí)行一樣。耐久性耐久性Durability 一個事務(wù)一旦完成全部操作后,提交結(jié)果一個事務(wù)一旦完成全部操作后,提交結(jié)果,它對數(shù)據(jù)庫的一切改動應(yīng)永久地反映在數(shù)據(jù),它對數(shù)據(jù)庫的一切改動應(yīng)永久地反映在數(shù)據(jù)庫中。即使以后系統(tǒng)發(fā)生缺點,也應(yīng)保管這個庫中。即使以后系統(tǒng)發(fā)生缺點,也應(yīng)保管這個事務(wù)執(zhí)行的結(jié)果。事務(wù)執(zhí)行的結(jié)果。一、顯式事務(wù)一、顯式事務(wù) 也稱用戶指定事務(wù),經(jīng)過一些專門的也稱用戶指定事務(wù),

18、經(jīng)過一些專門的T-SQL語句來完成。語句來完成。1.啟動事務(wù)啟動事務(wù) BEGIN TRANSACTION tran_name WITH MARK desp 其中:其中:tran_name為事務(wù)稱號,可省略為事務(wù)稱號,可省略 WITH MARK表示在日志中標(biāo)志,表示在日志中標(biāo)志,desp是標(biāo)志名字符串是標(biāo)志名字符串2.終了事務(wù)終了事務(wù) COMMIT TRANSACTION tran_name 3.回滾事務(wù)回滾事務(wù) ROLLBACK TRANSACTION tran_name | savepoint_name 去除從事務(wù)開場或某個保管點開場所作的一切數(shù)據(jù)去除從事務(wù)開場或某個保管點開場所作的一切數(shù)據(jù)

19、修正。修正。4.設(shè)置保管點設(shè)置保管點 SAVE TRANSACTION savepoint_name 保管點是假設(shè)要有條件地取消事務(wù)的一部分,事務(wù)保管點是假設(shè)要有條件地取消事務(wù)的一部分,事務(wù)可以前往的位置??梢郧巴奈恢?。例:例:二、自動提交事務(wù)二、自動提交事務(wù) 是是SQL Server默許的事務(wù)管理方式,每個默許的事務(wù)管理方式,每個T-SQL語句完成時,都被自動地提交或回滾。語句完成時,都被自動地提交或回滾。三、隱性事務(wù)三、隱性事務(wù) 當(dāng)銜接以隱性事務(wù)方式下操作時,當(dāng)銜接以隱性事務(wù)方式下操作時,SQL Server將在提交或回滾當(dāng)前事務(wù)后自動啟動新將在提交或回滾當(dāng)前事務(wù)后自動啟動新的事務(wù)。的事

20、務(wù)。用來設(shè)置的命令用來設(shè)置的命令 SET IMPLICIT_TRANSACTIONS ON | OFF留意:在隱形事務(wù)方式下,用戶必需在事務(wù)終留意:在隱形事務(wù)方式下,用戶必需在事務(wù)終了時將其顯式地提交或回滾,否那么一旦用戶了時將其顯式地提交或回滾,否那么一旦用戶斷開銜接,事務(wù)內(nèi)一切數(shù)據(jù)將回滾。斷開銜接,事務(wù)內(nèi)一切數(shù)據(jù)將回滾。例:例: 數(shù)據(jù)庫是一個可以供多個用戶共同運用的數(shù)據(jù)庫是一個可以供多個用戶共同運用的共享資源。共享資源。串行訪問,每個時辰只能有一個用戶運用程序串行訪問,每個時辰只能有一個用戶運用程序?qū)?shù)據(jù)庫進(jìn)展存取,其它用戶程序必需等待。對數(shù)據(jù)庫進(jìn)展存取,其它用戶程序必需等待。缺陷:制約數(shù)

21、據(jù)庫訪問效率的瓶頸,不利于數(shù)缺陷:制約數(shù)據(jù)庫訪問效率的瓶頸,不利于數(shù)據(jù)庫資源的利用。據(jù)庫資源的利用。并行訪問,經(jīng)過并發(fā)控制機(jī)制允許多個用戶并并行訪問,經(jīng)過并發(fā)控制機(jī)制允許多個用戶并發(fā)地訪問數(shù)據(jù)庫。發(fā)地訪問數(shù)據(jù)庫。 當(dāng)多個用戶并發(fā)地訪問數(shù)據(jù)庫時就會產(chǎn)生多當(dāng)多個用戶并發(fā)地訪問數(shù)據(jù)庫時就會產(chǎn)生多個事務(wù)同時存取同一數(shù)據(jù)的情況。個事務(wù)同時存取同一數(shù)據(jù)的情況。 假設(shè)對并發(fā)操作不加以控制就會呵斥錯誤地假設(shè)對并發(fā)操作不加以控制就會呵斥錯誤地存取數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。存取數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。 數(shù)據(jù)庫的并發(fā)控制機(jī)制是衡量數(shù)據(jù)庫管理系數(shù)據(jù)庫的并發(fā)控制機(jī)制是衡量數(shù)據(jù)庫管理系統(tǒng)性能的重要技術(shù)標(biāo)志。統(tǒng)性能的重要

22、技術(shù)標(biāo)志。并發(fā)操作能夠帶來的數(shù)據(jù)不一致性情況有三種并發(fā)操作能夠帶來的數(shù)據(jù)不一致性情況有三種例例 在一個飛機(jī)訂票系統(tǒng)中,能夠會出現(xiàn)的業(yè)務(wù):在一個飛機(jī)訂票系統(tǒng)中,能夠會出現(xiàn)的業(yè)務(wù): 1甲售票點讀航班甲售票點讀航班X的機(jī)票余額數(shù)為的機(jī)票余額數(shù)為A=25; 2緊接著,乙售票點讀同一航班緊接著,乙售票點讀同一航班X的機(jī)票余的機(jī)票余額數(shù)額數(shù)A=25; 3甲售票點賣出一張機(jī)票,然后修正機(jī)票余甲售票點賣出一張機(jī)票,然后修正機(jī)票余額數(shù)額數(shù)A=A-1為為24,并把,并把A寫回數(shù)據(jù)庫;寫回數(shù)據(jù)庫; 4乙售票點也賣出一張機(jī)票乙售票點也賣出一張機(jī)票,同樣接著修正同樣接著修正機(jī)票余額數(shù)機(jī)票余額數(shù)A=A-1為為24,并把,

23、并把A寫回數(shù)據(jù)庫。寫回數(shù)據(jù)庫。設(shè)甲售票點對應(yīng)于事務(wù)設(shè)甲售票點對應(yīng)于事務(wù)T1,乙售票點對應(yīng)于事務(wù),乙售票點對應(yīng)于事務(wù)T2,那么上述事務(wù)過程的描畫如圖,那么上述事務(wù)過程的描畫如圖 時間時間T1T1T2T2DBDB中的中的A A值值t0t02525t1t1read(A)read(A)t2t2read(A)read(A)t3t3A:=A-1A:=A-1t4t4write(A)write(A)t5t52424t6t6A:=A-1A:=A-1t7t7write(A)write(A)t8t82424時間時間T1T1T2T2DBDB中的中的A A值值t0t02525t1t1read(A)read(A)t2t2

24、read(A)read(A)t3t3A:=A-10A:=A-10t4t4write(A)write(A)t5t51515時間時間T1T1T2T2DBDB中的中的A A值值t0t02525t1t1read(A)read(A)t2t2A:=A-10A:=A-10t3t3write(A)write(A)t4t4read(A)read(A)1515t5t5ROLLBACKROLLBACKt6t62525 鎖是防止存取同一資源的用戶之間出現(xiàn)不正鎖是防止存取同一資源的用戶之間出現(xiàn)不正確地修正數(shù)據(jù)或不正確地更改數(shù)據(jù)構(gòu)造的一種確地修正數(shù)據(jù)或不正確地更改數(shù)據(jù)構(gòu)造的一種機(jī)制。機(jī)制。 SQL Server 2005

25、具有多粒度鎖定,允許鎖具有多粒度鎖定,允許鎖定不同的資源:定不同的資源:RID、鍵、頁、擴(kuò)展盤區(qū)、表、鍵、頁、擴(kuò)展盤區(qū)、表、DB。數(shù)據(jù)庫數(shù)據(jù)庫關(guān)系關(guān)系R1關(guān)系關(guān)系Rn元組元組元組元組元組元組元組元組 三級粒度樹三級粒度樹SQL Server提供六種鎖定方式:提供六種鎖定方式:共享鎖共享鎖(S) 允許并發(fā)事務(wù)讀取一個資源,一旦某資源上存在允許并發(fā)事務(wù)讀取一個資源,一旦某資源上存在共享鎖,任何其他事務(wù)都不能修正數(shù)據(jù)。共享鎖,任何其他事務(wù)都不能修正數(shù)據(jù)。更新鎖更新鎖(U) 用于可更新的資源中,一次只需一個事務(wù)可以獲用于可更新的資源中,一次只需一個事務(wù)可以獲得資源的更新鎖,假設(shè)事務(wù)修正資源,那么更新鎖

26、轉(zhuǎn)得資源的更新鎖,假設(shè)事務(wù)修正資源,那么更新鎖轉(zhuǎn)換為排它鎖,否那么轉(zhuǎn)換為共享鎖。換為排它鎖,否那么轉(zhuǎn)換為共享鎖。排它鎖排它鎖(X) 排它鎖也稱為獨占鎖或?qū)戞i。用于數(shù)據(jù)修正操作排它鎖也稱為獨占鎖或?qū)戞i。用于數(shù)據(jù)修正操作,如,如INSERT、UPDATE、DELETE等,可以防止并等,可以防止并發(fā)事務(wù)對資源的訪。發(fā)事務(wù)對資源的訪。意向鎖意向鎖 用于建立鎖的層次構(gòu)造,可以提高性能。分意向用于建立鎖的層次構(gòu)造,可以提高性能。分意向共享共享(IS)、意向排它、意向排它(IX)、與意向排它共享、與意向排它共享(SIX)。假。假設(shè)對一個結(jié)點加意向鎖,那么闡明該結(jié)點的下層結(jié)點設(shè)對一個結(jié)點加意向鎖,那么闡明該結(jié)

27、點的下層結(jié)點正在被加鎖。對任一結(jié)點加鎖時,必需先對它上層結(jié)正在被加鎖。對任一結(jié)點加鎖時,必需先對它上層結(jié)點加意向鎖。點加意向鎖。架構(gòu)鎖架構(gòu)鎖 在執(zhí)行依賴于表架構(gòu)的操作時運用,如表的數(shù)據(jù)在執(zhí)行依賴于表架構(gòu)的操作時運用,如表的數(shù)據(jù)定義操作。定義操作。大容量更新鎖大容量更新鎖 向表中大容量復(fù)制數(shù)據(jù)并指定了向表中大容量復(fù)制數(shù)據(jù)并指定了TABLOCK時運時運用,允許進(jìn)程將數(shù)據(jù)并發(fā)地大容量復(fù)制到同一表。用,允許進(jìn)程將數(shù)據(jù)并發(fā)地大容量復(fù)制到同一表。鎖的兼容性鎖的兼容性請求模式請求模式現(xiàn)有授權(quán)模式現(xiàn)有授權(quán)模式ISSUIXSIXX意向共享意向共享IS是是是是是是是是是是共享共享S是是是是是是更新更新U是是是是意

28、向排它意向排它IX是是是是與意向排它共享與意向排它共享SIX是是排它排它X自定義鎖自定義鎖死鎖死鎖T1T2兩個或兩個以上的事務(wù)都處于等待形狀,每個事兩個或兩個以上的事務(wù)都處于等待形狀,每個事務(wù)都在等待其中另一個事務(wù)解除封鎖,它才干務(wù)都在等待其中另一個事務(wù)解除封鎖,它才干繼續(xù)執(zhí)行下去,結(jié)果任何一個事務(wù)都無法繼續(xù)繼續(xù)執(zhí)行下去,結(jié)果任何一個事務(wù)都無法繼續(xù)執(zhí)行,這種景象稱為死鎖。執(zhí)行,這種景象稱為死鎖。SQL Server能自能自動發(fā)現(xiàn)并解除死鎖,動發(fā)現(xiàn)并解除死鎖,它會選擇其進(jìn)程累它會選擇其進(jìn)程累計計CPU時間最少的時間最少的用戶作為犧牲者。用戶作為犧牲者。l自定義鎖超時自定義鎖超時l 可以設(shè)置運用程

29、序等待阻塞資源的最長時間??梢栽O(shè)置運用程序等待阻塞資源的最長時間。l SET LOCK_TIMEOUT out_timel自定義事務(wù)隔離級別自定義事務(wù)隔離級別l 可以運用更嚴(yán)厲或較寬松的隔離級別??梢赃\用更嚴(yán)厲或較寬松的隔離級別。l SET TRANSACTION ISOLATION LEVEL l READ COMMITTED | READ UNCOMMITTED l | REPEATABLE READ | SERIALIZABLE l 四種級別分別是:提交讀、未提交讀、可反復(fù)讀四種級別分別是:提交讀、未提交讀、可反復(fù)讀和可串行讀。和可串行讀。l鎖定提示鎖定提示l 在運用在運用SELECT、

30、INSERT、UPDATE、DELETE語句時指定表級鎖定提示的范圍。語句時指定表級鎖定提示的范圍。 由于由于SELECT語句前往一切滿足語句前往一切滿足WHERE子句中子句中條件的行,而運用程序并不總能將整個結(jié)果集作為一條件的行,而運用程序并不總能將整個結(jié)果集作為一個單元來處置,因此引入游標(biāo)機(jī)制,以便每次處置一個單元來處置,因此引入游標(biāo)機(jī)制,以便每次處置一行或一部分行。行或一部分行。 游標(biāo)包括游標(biāo)結(jié)果集游標(biāo)包括游標(biāo)結(jié)果集(Cursor Result Set)和游標(biāo)和游標(biāo)位置位置(Cursor Position)兩個部分,兩個部分,一、游標(biāo)的根本操作一、游標(biāo)的根本操作1.聲明游標(biāo)聲明游標(biāo) DE

31、CLARE 游標(biāo)名游標(biāo)名 INSENSITIVE SCROLL STATIC | KEYSET | DYNAMIC | FAST_FORWARD CURSOR FOR select_statement FOR READ ONLY | UPDATE OF 列名列名,n 其中:其中:INSENSITIVE創(chuàng)建將由該游標(biāo)運用的數(shù)創(chuàng)建將由該游標(biāo)運用的數(shù)據(jù)的暫時副本,該游標(biāo)不允許修正。據(jù)的暫時副本,該游標(biāo)不允許修正。 SCROLL指定一切的提取選項,分指定一切的提取選項,分FIRST、LAST、PRIOR、NEXT、RELATIVE和和ABSOLUTE幾種。幾種。DECLARE 游標(biāo)名游標(biāo)名 INSEN

32、SITIVE SCROLL STATIC | KEYSET | DYNAMIC | FAST_FORWARD CURSOR FOR select_statement FOR READ ONLY | UPDATE OF 列名列名,n SQL Server2005支持四種游標(biāo):支持四種游標(biāo): STATIC靜態(tài)游標(biāo)靜態(tài)游標(biāo) 按照翻開時的原樣顯示結(jié)果集按照翻開時的原樣顯示結(jié)果集 DYNAMIC動態(tài)游標(biāo)動態(tài)游標(biāo) 反映結(jié)果集中所作的一切更改反映結(jié)果集中所作的一切更改 FAST_FORWARD只進(jìn)游標(biāo)只進(jìn)游標(biāo) 只能從頭到尾順序提取只能從頭到尾順序提取 KEYSET鍵集驅(qū)動游標(biāo)鍵集驅(qū)動游標(biāo) 翻開時成員和行順序

33、是固定的翻開時成員和行順序是固定的DECLARE 游標(biāo)名游標(biāo)名 INSENSITIVE SCROLL STATIC | KEYSET | DYNAMIC | FAST_FORWARD CURSOR FOR select_statement FOR READ ONLY | UPDATE OF 列名列名,n select_statement是規(guī)范的是規(guī)范的SELECT語句語句 READ ONLY把游標(biāo)定義為只讀把游標(biāo)定義為只讀 UPDATE定義游標(biāo)內(nèi)可更新的列,如沒有指定列表,定義游標(biāo)內(nèi)可更新的列,如沒有指定列表,那么可以更新一切的列那么可以更新一切的列2.翻開游標(biāo)翻開游標(biāo) OPEN 游標(biāo)名游標(biāo)名

34、 翻開游標(biāo)時效力器將執(zhí)行聲明時運用的翻開游標(biāo)時效力器將執(zhí)行聲明時運用的SELECT語語句。游標(biāo)翻開后,其位置位于第一行。句。游標(biāo)翻開后,其位置位于第一行。3.封鎖游標(biāo)封鎖游標(biāo) CLOSE 游標(biāo)名游標(biāo)名 封鎖游標(biāo)后可以再次翻開。封鎖游標(biāo)后可以再次翻開。4.釋放游標(biāo)釋放游標(biāo) DEALLOCATE 游標(biāo)名游標(biāo)名 釋放游標(biāo)將釋放一切分配給此游標(biāo)的資源。釋放游標(biāo)將釋放一切分配給此游標(biāo)的資源。5.提取行提取行 FETCH NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n FROM 游標(biāo)名游標(biāo)名 INTO variable_name,n 前往當(dāng)前行之

35、后的結(jié)果行,且當(dāng)前往當(dāng)前行之后的結(jié)果行,且當(dāng)前行遞增為結(jié)果行。如是對游標(biāo)前行遞增為結(jié)果行。如是對游標(biāo)第一次提取,那么前往第一行。第一次提取,那么前往第一行。前往當(dāng)前行之前的結(jié)果行,且當(dāng)前往當(dāng)前行之前的結(jié)果行,且當(dāng)前行遞減為結(jié)果行。如是對游標(biāo)前行遞減為結(jié)果行。如是對游標(biāo)第一次提取,那么無行前往。第一次提取,那么無行前往。前往游標(biāo)的第一行,前往游標(biāo)的第一行,并將其作為當(dāng)前行。并將其作為當(dāng)前行。前往游標(biāo)的最后一行,前往游標(biāo)的最后一行,并將其作為當(dāng)前行。并將其作為當(dāng)前行。FETCH NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n FROM 游

36、標(biāo)名游標(biāo)名 INTO variable_name,n INTO variable_name,n允許將提取的列數(shù)據(jù)允許將提取的列數(shù)據(jù)放到部分變量中。放到部分變量中。 可以經(jīng)過可以經(jīng)過FETCH_STATUS()函數(shù)報告上一個函數(shù)報告上一個FETCH的形狀,的形狀,0為勝利,為勝利,-1為失敗,為失敗,-2為行不存在。為行不存在。如如n0那么前往從游標(biāo)頭開場的那么前往從游標(biāo)頭開場的第第n行,如行,如n0那么前往當(dāng)前行之后的第那么前往當(dāng)前行之后的第n行,如行,如n0那么前往當(dāng)前行之那么前往當(dāng)前行之前的第前的第n行,并將其作為當(dāng)前行行,并將其作為當(dāng)前行。如。如n=0那么前往當(dāng)前行。那么前往當(dāng)前行。二、

37、運用游標(biāo)二、運用游標(biāo)1.運用游標(biāo)的過程運用游標(biāo)的過程運用運用DECLARE CURSORDECLARE CURSOR聲明游標(biāo)聲明游標(biāo)運用運用OPENOPEN翻開游標(biāo)翻開游標(biāo)運用運用FETCH INTOFETCH INTO提取數(shù)據(jù)提取數(shù)據(jù)空否空否運用運用CLOSECLOSE封鎖游標(biāo)封鎖游標(biāo)運用運用DEALLOCATE DEALLOCATE 釋放游標(biāo)釋放游標(biāo)不空不空空空例:利用游標(biāo)打印每個學(xué)生的信息及平均分例:利用游標(biāo)打印每個學(xué)生的信息及平均分2.運用游標(biāo)修正和刪除數(shù)據(jù)運用游標(biāo)修正和刪除數(shù)據(jù) 只需在游標(biāo)聲明時沒帶只需在游標(biāo)聲明時沒帶READ ONLY,那么這個,那么這個游標(biāo)就是可更新的。游標(biāo)就是可

38、更新的。修正:修正:UPDATE 表名表名 SET 列名列名=表達(dá)式表達(dá)式 WHERE CURRENT OF 游標(biāo)名游標(biāo)名刪除:刪除:DELETE 闡明闡明 WHERE CURRENT OF 游標(biāo)名游標(biāo)名例例:在在score表中添表中添加一個加一個level列,列,存放每個成果對存放每個成果對應(yīng)的成果等級。應(yīng)的成果等級。E-R模型的設(shè)計及向關(guān)系模型的轉(zhuǎn)換參考書上的第2章為了把現(xiàn)實世界中的詳細(xì)事物, 籠統(tǒng)、組織為某一DBMS數(shù)據(jù)庫管理系統(tǒng)支持的數(shù)據(jù)模型, 人們常首先把現(xiàn)實世界籠統(tǒng)為信息世界, 然后將信息世界轉(zhuǎn)換為機(jī)器世界。也就是說, 首先籠統(tǒng)為某一種信息構(gòu)造, 其并不依賴于詳細(xì)的計算機(jī)系統(tǒng), 不

39、是某一個DBMS支持的數(shù)據(jù)模型, 而是概念級的模型;然后, 再把概念模型, 轉(zhuǎn)換為計算機(jī)上某一DBMS支持的數(shù)據(jù)模型邏輯數(shù)據(jù)模型 。信息的現(xiàn)實世界信息的現(xiàn)實世界 經(jīng)過實體經(jīng)過實體(Entity)、實體的特征、實體的特征(Entity Characteristic)、實體集、實體集(Entity Set)及聯(lián)絡(luò)及聯(lián)絡(luò)(Relation)進(jìn)展劃分和認(rèn)識。進(jìn)展劃分和認(rèn)識。概念模型概念模型, 面向用戶面向用戶, 應(yīng)具有較強(qiáng)的語義表達(dá)才干應(yīng)具有較強(qiáng)的語義表達(dá)才干, 簡單、簡單、明晰、易于了解;明晰、易于了解; 數(shù)據(jù)模型邏輯數(shù)據(jù)模型數(shù)據(jù)模型邏輯數(shù)據(jù)模型, 比如網(wǎng)狀模型、層次模型、比如網(wǎng)狀模型、層次模型、關(guān)

40、系模型等,面向關(guān)系模型等,面向DBMS, 用以描寫實體在數(shù)據(jù)庫中的存儲用以描寫實體在數(shù)據(jù)庫中的存儲方式方式, 以及實體之間的聯(lián)絡(luò)。以及實體之間的聯(lián)絡(luò)。信息世界 實體的特征在頭腦中構(gòu)成的知識稱為屬性;實體經(jīng)過其屬性表示稱為實例;同類實例的集合稱為對象,對象即實體集中的實體用屬性表示得出的信息集合;實體集之間的聯(lián)絡(luò)用對象聯(lián)絡(luò)表示。概念模型是對現(xiàn)實世界的第一層籠統(tǒng), 是用戶與數(shù)據(jù)庫設(shè)計人員之間進(jìn)展交流的言語。建立概念模型, 涉及如下術(shù)語: 實體、實體集、屬性、域、關(guān)鍵字、聯(lián)絡(luò)。概念模型的表示方法很多, 其中最為常用的是P.P.S.Chen于1976年提出的E-R圖。 E-R模型中的三個組織成分模型中的三個組織成分 實體、屬性、聯(lián)絡(luò)實體實體entity)客觀存在并可相互區(qū)別的事物稱為實體客觀存在并可相互區(qū)別的事物稱為實體實體可以是詳細(xì)的人、事、物。比如一個學(xué)生、一門課等實體可以是詳細(xì)的人、事、物。比如一個學(xué)生、一門課等實體也可以是籠統(tǒng)的概念或聯(lián)絡(luò)實體也可以是籠統(tǒng)的概念或聯(lián)絡(luò) 比如比如, 學(xué)生的一次選課、部門的一次訂貨、教師與系的任務(wù)學(xué)生的一次選課、部門的一次訂貨、教師與系的任務(wù)關(guān)系即某位教師在某系

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論