2024年數(shù)據(jù)庫原理知識(shí)點(diǎn)總結(jié)_第1頁
2024年數(shù)據(jù)庫原理知識(shí)點(diǎn)總結(jié)_第2頁
2024年數(shù)據(jù)庫原理知識(shí)點(diǎn)總結(jié)_第3頁
2024年數(shù)據(jù)庫原理知識(shí)點(diǎn)總結(jié)_第4頁
2024年數(shù)據(jù)庫原理知識(shí)點(diǎn)總結(jié)_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)庫系統(tǒng)概述

一、有關(guān)概念

1.數(shù)據(jù)

2.數(shù)據(jù)庫(DB)

3.數(shù)據(jù)庫管理系統(tǒng)(DBMS)

JAccess

桌面DBMSVFP

"SQLServer

Y

Oracle

客戶機(jī)/服務(wù)器型DBMSMySQL

DB2

4.數(shù)據(jù)庫系統(tǒng)(DBS)

數(shù)據(jù)庫(DB)

Y

數(shù)據(jù)庫管理系統(tǒng)(DBMS)

開發(fā)工具

應(yīng)用系統(tǒng)

二、數(shù)據(jù)管理技術(shù)的發(fā)展

1.數(shù)據(jù)管理的三個(gè)階段

人工管理文獻(xiàn)系統(tǒng)數(shù)據(jù)庫系統(tǒng)

數(shù)據(jù)能否保存不能保存能夠保存能夠保存

數(shù)據(jù)面對(duì)的對(duì)象某一應(yīng)用程序某一應(yīng)用程序整個(gè)應(yīng)用系統(tǒng)

無共享,一組共享性差,一個(gè)數(shù)

數(shù)據(jù)的共享程度數(shù)據(jù)只能對(duì)應(yīng)一個(gè)據(jù)文獻(xiàn)只能對(duì)應(yīng)一共享性高

應(yīng)用程序。個(gè)應(yīng)用程序。

不獨(dú)立,它是應(yīng)用數(shù)據(jù)庫與應(yīng)用系統(tǒng)

數(shù)據(jù)的獨(dú)立性獨(dú)立性差

程序的一部分。完全分開

概念模型

一、模型的三個(gè)世界

1.現(xiàn)實(shí)世界

2.信息世界:即依照需求分析畫概念模型(即E-R圖),E-R圖與DBMS無關(guān)。

3.機(jī)器世界:將E-R圖轉(zhuǎn)換為某一個(gè)數(shù)據(jù)模型,數(shù)據(jù)模型與DBMS有關(guān)。

注意:信息世界又稱概念模型,機(jī)器世界又稱數(shù)據(jù)模型

二、實(shí)體及屬性

1.實(shí)體:客觀存在尹可相互區(qū)分的事物.

2.屬性:

3.核心詞(碼、key):能唯一標(biāo)識(shí)每個(gè)實(shí)體又不含多出屬性的屬性組合。

一個(gè)表的碼能夠有多個(gè),但主碼只能有一個(gè)。

例:借書表(學(xué)號(hào),姓名,范殳,書名,作者,定價(jià),儂,還期)

要求:學(xué)生一次能夠借多本書,同一個(gè)書只能借一本,但能夠數(shù)次續(xù)借。

4.實(shí)體型:即二維表的結(jié)構(gòu)

例student(no,name,sex,age,dept)

5.實(shí)體集:即整個(gè)二維表

三、實(shí)體間的聯(lián)系:

I.兩實(shí)體集間實(shí)體之間的聯(lián)系

{1:1聯(lián)系

1:n聯(lián)系

m:n聯(lián)系

2.同一實(shí)體集內(nèi)實(shí)體之間的聯(lián)系

{1:1聯(lián)系

1:n聯(lián)系

in:n聯(lián)系

四、概念模型(常用E-R圖表示)

實(shí)體型:

屬性:

聯(lián)系:

闡明:①E-R圖作為用戶與開發(fā)人員的中間語言。

②E.R圖能夠等價(jià)轉(zhuǎn)換為層次、網(wǎng)狀、關(guān)系模型。

舉例:

學(xué)校有若干個(gè)系,每個(gè)系有若干班級(jí)和教研室,每個(gè)教研室有若干教員,其中有的教授

和副教授每人各帶若干研究生。每個(gè)班有若干學(xué)生,每個(gè)學(xué)生選修若干課程,每門課程有若

干學(xué)生選修。用E-R圖畫出概念模型。

數(shù)據(jù)模型

一、層次模型:用樹型結(jié)構(gòu)表示實(shí)體之間的聯(lián)系。

①每個(gè)結(jié)點(diǎn)代表一個(gè)實(shí)體型。

②只能直接處理一對(duì)多(含一對(duì)一)的實(shí)體關(guān)系。

③杳找層次數(shù)據(jù)庫中的統(tǒng)計(jì),速度較慢。

二、網(wǎng)狀模型:用圖結(jié)構(gòu)表示實(shí)體之間的聯(lián)系。

①每個(gè)結(jié)點(diǎn)代表一個(gè)實(shí)體型。

②能夠處理多對(duì)多的實(shí)體關(guān)系。

③查找網(wǎng)狀數(shù)據(jù)庫中的統(tǒng)計(jì),速度最快。

三、關(guān)系模型:用二維表表示實(shí)體之間的聯(lián)系。

1.重要術(shù)語:

關(guān)系:一個(gè)關(guān)系就是一個(gè)二維表;

元組:二維表的一行,即實(shí)體;

關(guān)系模式:在實(shí)體型的基礎(chǔ)上,注明主碼。

關(guān)系模型:指一個(gè)數(shù)據(jù)庫中所有二維表結(jié)構(gòu)的集合。

2.特點(diǎn):

①關(guān)系模型是建立在嚴(yán)格的數(shù)學(xué)理論的基礎(chǔ)上的;

②關(guān)系模型的存取途徑對(duì)?用戶透明;

③查找關(guān)系數(shù)據(jù)庫中的統(tǒng)計(jì),速度最慢。

小結(jié):數(shù)據(jù)有三種類型,DBMS就有三種類型,DB亦有三種類型。

數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)

一、數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)

①單機(jī)結(jié)構(gòu):

DBMS、數(shù)據(jù)庫、開發(fā)工具、應(yīng)用系統(tǒng)安裝在一臺(tái)計(jì)算機(jī)上。

②C/S結(jié)構(gòu):局域網(wǎng)結(jié)構(gòu)

客戶機(jī):裝開發(fā)工具、應(yīng)用系統(tǒng)

服務(wù)器:裝DBMS、數(shù)據(jù)庫

③B/S結(jié)構(gòu):Internet結(jié)構(gòu)

服務(wù)器:裝DBMS、數(shù)據(jù)庫、開發(fā)工具、應(yīng)用系統(tǒng)

客戶機(jī):裝IE即可

三、數(shù)據(jù)庫系統(tǒng)的模式結(jié)構(gòu)

I.三級(jí)模式

①模式:是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特性的描述。

0模式只包括數(shù)據(jù)庫的結(jié)構(gòu);

0模式既不包括應(yīng)用程序,又不包括數(shù)據(jù)庫結(jié)構(gòu)的存儲(chǔ);

②外模式:是模式的一個(gè)子集,是與某一個(gè)應(yīng)用程序有關(guān)的邏輯表示。

特點(diǎn):一個(gè)應(yīng)用程序只能使用一個(gè)外模式,但同一個(gè)外模式可為多個(gè)應(yīng)用程序使用。

③內(nèi)模式:描述數(shù)據(jù)庫結(jié)構(gòu)的存儲(chǔ),但不包括物理統(tǒng)計(jì)。

2.兩級(jí)映象

①外模式/模式映象:確保數(shù)據(jù)庫的邏輯獨(dú)立性;

②模式/內(nèi)模式映象:確保數(shù)據(jù)庫的物理獨(dú)立性:

3.兩級(jí)映象的意義

①使數(shù)據(jù)庫與應(yīng)用系統(tǒng)完全分開,數(shù)據(jù)庫變化時(shí),應(yīng)用系統(tǒng)無須變化。

②數(shù)據(jù)的存取完全由DBMS管理,用戶無須考慮存取途徑。

數(shù)據(jù)庫管理系統(tǒng)

1.DBMS的功效:負(fù)責(zé)對(duì)數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理與控制。

①數(shù)據(jù)定義:即定義數(shù)據(jù)庫中各對(duì)象的結(jié)構(gòu)

②數(shù)據(jù)操縱:包括對(duì)數(shù)據(jù)庫進(jìn)行查詢、插入、刪除、修改等操作。

③數(shù)據(jù)控制:包括安全性控制、完整性控制、并發(fā)控制、數(shù)據(jù)庫恢復(fù)。

2.DBMS的組成:

DDL語言

Y

DML語言

J

DCL語言

實(shí)用程序

注意:

①SQL集DDL,DML,DCL功效于一體;

②所有應(yīng)用程序通過SQL語句才能訪問數(shù)據(jù)庫

一、基本概念

1.碼:能唯一標(biāo)識(shí)元組的屬性集。

2.候選碼:一個(gè)屬性集既能唯一標(biāo)識(shí)元組,且又不含有多出屬性,一個(gè)關(guān)系模式能夠

有多個(gè)候選碼。

3.主碼:任選候選碼中的一個(gè)。

4.主屬性:主碼中包括的各個(gè)屬性。

5.非主屬性:不包括在主碼中的各個(gè)屬性。

6.外碼:設(shè)F是關(guān)系R的一個(gè)屬性,不是R的主碼,但卻是另一個(gè)關(guān)系S的主碼,則

稱F是關(guān)系R的外碼。

例:student(sno,sname,ssex,sage,sdept)

Sc(sno,eno,grade)

Sc的主碼為:(sno,cno):外碼為:sno

關(guān)系的數(shù)學(xué)定義

一、域(domain)

I.定義:域是一組具備相同類型的值的集合。

2.域的基數(shù):域中所含數(shù)據(jù)的個(gè)數(shù)。

二、笛卡爾積

1.定義:給定一組域D1,D2,D3,則D1XD2XD3稱為笛卡爾積。

2.笛卡爾積D1XD2XD3對(duì)應(yīng)一個(gè)二維表,所含元組的個(gè)數(shù)等于各個(gè)域的基數(shù)之積。

三、關(guān)系

1.定義:笛卡兒積的一部分元組稱為關(guān)系。

2.關(guān)系的目(或度):一個(gè)關(guān)系所含屬性的個(gè)數(shù)。

3.關(guān)系的性質(zhì)

任意兩個(gè)元組不能完全相同,但屬性名允許重復(fù)。

四、關(guān)系的完整性

1.實(shí)體完整性:指關(guān)系的所有主屬性都不能取空值。

注意:實(shí)體完整性不但僅是主碼整體不能取空值。

2.參考完整性:指一個(gè)關(guān)系外碼的取值必須是有關(guān)關(guān)系中主碼的有效值或空值。

例:班級(jí)(班名,人數(shù))

學(xué)生(學(xué)號(hào),姓名,性別,密碼,班名)

在學(xué)生表中,班名的取值必須是班級(jí)表[班名]的值或空值。

關(guān)系代數(shù)

一、老式的集合運(yùn)算

設(shè)關(guān)系R、S的結(jié)構(gòu)完全相同,貝心

RUS:由屬于R或?qū)儆赟的元組組成。

Rns:由既屬于R又屬于S的元組組成。

R-S:由屬于R而不屬于S的元組組成。

思考:(RGS)U(R-S)=?

RXS:設(shè)R有m個(gè)屬性,K1個(gè)元組:S有n個(gè)屬性,K2個(gè)元組,則RXS含有(m+n)

個(gè)屬性,(K1XK2)個(gè)元組。

二、專門的關(guān)系運(yùn)算

1.選擇:從關(guān)系R中選擇滿足條件的元組。記為:o>(R)

2.投影:從關(guān)系R中選擇若干屬性組成新的關(guān)系,并把新關(guān)系的重復(fù)元組去掉。

記為:口.㈤

3.條件連接:將兩關(guān)系按一定條件連接成一個(gè)新關(guān)系,記為:R%S=OF(RX、S)

闡明:條件連接:兩關(guān)系能夠沒有公共屬性,若有公共屬性,則新關(guān)系含有重復(fù)屬性。

4.自然連接:將兩關(guān)系按公共屬性連接成一個(gè)新的關(guān)系,并把新關(guān)系的重復(fù)屬性去掉。

記為:R^S

闡明:①自然連接:兩關(guān)系最少有一個(gè)公共屬性。

②對(duì)「R的每個(gè)元組,S都從第一個(gè)元組開始判斷,若兩元組的公共屬性值相

同,則產(chǎn)生一個(gè)新元組添加到新關(guān)系中,最后把新關(guān)系中的重復(fù)屬性去掉。

5.除:給定關(guān)系R(x,y)和S(y,z),則R+S=P(x),其中x,y,z為屬性組

求解過程:

①求R中x能夠取哪此值,并求各值的象集。

②求S在屬性組y上的投影K。

③檢查每個(gè)象集是否包括K

注:除不是一個(gè)必須的運(yùn)算,能夠由其他運(yùn)算符替代。

例:設(shè)有關(guān)系R,S如下圖,求R+S。

ABCBCD

alblc2blc2dl

a2b3c7b2cldl

a3b4c6b2c3d2

alb2c3

a4b6c6

a2b2c3

alb2cl

解:在關(guān)系R中,A能夠取四個(gè)值,al,a2,a3,a4o

al的象集為{(bl,c2),(b2,c3),(b2,cl)}

a2的象集為{(b3,c7),(b2,c3)}

a3的象集為{(b4,c6)}

a4的象集為{(b6,c6)}

S在(B,C)上的投影K為{(bl,c2),(b2,c3),(b2,cl)}

顯然只有al的象集包括K,故R4-S={al}

結(jié)論:怎樣寫關(guān)系代數(shù)體現(xiàn)式?

答:①查詢包括多個(gè)關(guān)系時(shí),一般使用8->b->no

②查詢包括“否定”時(shí),一般用差運(yùn)算。

③查詢包括“所有”時(shí),一般用除運(yùn)算。

④查詢包括“最少”時(shí),一-般用X

關(guān)系數(shù)據(jù)庫規(guī)范化理論

函數(shù)依賴

一、有關(guān)概念:

R表

XHKHKMXMDZCJ

961C1OS高明D170

962C2DBS高飛D272

962C4AI高飛D280

962C1OS高明DI75

963C1OS高明DI90

1.函數(shù)依賴:

任給R(U),U為屬性集,x、y為U的子集,假如對(duì)于x的每個(gè)值,y有唯一確定的

值與之對(duì)應(yīng),則稱x決定y,或y函數(shù)依賴于Xo記為:x-*yo

例:KHTM

XM-DZ

(XH,KH)-CJ

KH-*(KM,XM)

2.完全函數(shù)依賴:

若x-y,且對(duì)于x的所有真子集x',都有x,y,則稱x完全決定y,或y完全函數(shù)

依賴于x。記為:x—Jy。

例1:(XH,KH)-CJ

但XHACJ

/

KH-CJ

故(XH,KH)—^CJ

例2:KH-*KM

結(jié)論:若x-y,且x只包括一個(gè)屬性,則x-^y。

3.部分函數(shù)依賴:

若x-y,且存在x的一個(gè)真子集X,,滿足X,一y,則稱x部分決定y,或y部分函數(shù)

依賴于x。記為:x—匕fy。

例I:(KH.KM)-XM

但KM-XM

貝U(KH,KM)—

例2:(XH,KH)-*DZ

但KII-*DZ

則(XH,KH)—^DZ

4.傳遞函數(shù)依賴:

若x-y,y~*z,但yT?x,則X—L->z

例:KM-XM,XM-DZ,但XM17KM

二、平凡函數(shù)依賴與非平凡函數(shù)依賴

設(shè)x-y,假如y是x的子集,則該依賴是平凡的。如:

Sno,snamc-*sno

假如y中最少有一個(gè)屬性不在x中,則該依賴是非平凡的。如:

Sno,sname-*sname,sdept

假如y中沒有一個(gè)屬性在x中,則該依賴為完全非平凡的。

三、函數(shù)依賴的推理規(guī)則

設(shè)有關(guān)系R,x、y、z為R的一個(gè)屬性集,則有:

①自反律:若yqx,則x-*義

②增廣律:若x-y,則xz-yz。

③傳遞律:若xfy,yfz,則xfz。

注意傳遞律與傳遞函數(shù)依賴的區(qū)分。

④合并律:若x-y,x~z,則x—yz。

⑤分解律:若xfyz,則xfy,xfz。

關(guān)系模式的規(guī)范化

一、問題提出

R表

XHKHKMXMDZCJ

961C1OS高明DI70

962C2DBS高飛D272

962C4AI高飛D280

962C1OS高明DI75

963C1OS高明DI90

答:存在問題

①數(shù)據(jù)冗余大;

②修改麻煩;

③插入異常:應(yīng)當(dāng)插入到DR中的數(shù)據(jù)插不進(jìn)夫.

如:新開課程沒有學(xué)生選修時(shí),新開課程的課程號(hào)、課程名插不進(jìn)去。

④刪除異常:不應(yīng)當(dāng)刪除的數(shù)據(jù)被刪掉。

如選修某門課的學(xué)生畢業(yè)了,在刪除學(xué)生信息的同時(shí),把課程信息也刪除掉。

結(jié)論:一個(gè)好的關(guān)系模式應(yīng)滿足;

①冗余應(yīng)盡也許少:

②應(yīng)盡也許防止插入、刪除異常;

③消去關(guān)系中不宜的屬性依賴關(guān)系。

二、范式

①什么叫范式?

指一個(gè)關(guān)系的非主屬性函數(shù)依賴于主碼的程度。

②什么叫關(guān)系規(guī)范化?

指一個(gè)關(guān)系從低級(jí)范式向高級(jí)范式的轉(zhuǎn)換過程。

INFn2NFn3NFnBCNFn4NFn5NF

③應(yīng)用:關(guān)系規(guī)范化埋論應(yīng)用在邏輯結(jié)構(gòu)設(shè)計(jì)階段。

三、關(guān)系模式的規(guī)范化

1.第一范式(1NF)

①定義:若關(guān)系R的所有屬性不能再分,則RG1NF

②存在問題

③原因:存在非主屬性對(duì)主碼的部分依賴。

(XH,K〃)一^XM

(XH.KH)-^DZ

④處理措施:消除非主屬性對(duì)主碼的部分依賴,

將關(guān)系R一分為二,將滿足完全依賴的屬性集組成一個(gè)關(guān)系;將滿足部分依賴的屬性

集組成另一個(gè)關(guān)系;

R1表R2表

XHKHCJKHKMXMDZ

961C170C1OS高明D1

962C272C2DBS高飛D2

962C48()C4AI高飛D2

962C175

963CI90

R1主碼:(XH,KH)

R2由碼:KH

2.第二范式(2NF)

①定義:若關(guān)系RE1NF,且它的每個(gè)非主屬性都完全依賴于主碼,則稱R£2NF。

②存在問題:

?冗余大:R1必要冗余,R2冗余能夠修改。

?修改麻煩

?插入異常:如新來的教師沒有上課,則該教師的信息就沒措施插入R2表中。

?刪除異常:若某位教師只授一門課,當(dāng)該門課不開時(shí),該教師的信息亦被刪除。

③原因:存在非主屬性對(duì)主碼的傳遞依賴。

KH->XM,XM->DZ,但XM▼KH

???KH-^DZ

[傳遞依賴必須有兩個(gè)非主屬性]

④處理措施:將R2一分為二

R21表R22表

KHKMXMXMDZ

C1OS高明高明D1

C2DBS高飛高飛D2

C4AI高飛

R21主碼:KH

R22士碼:XM

3.第三范式(3NF)

①定義:若關(guān)系R£2NF,且它的每個(gè)非主屬性都不傳遞依賴于主碼,則稱R£3NF。

②規(guī)范化過程

非規(guī)范關(guān)系

I使每個(gè)屬性都不能再分

1NF

I消去非主屬性對(duì)主碼的部分依賴

2NF

I消去非主屬性對(duì)主碼的傳遞依賴

3NF

4.結(jié)論

①若R£1NF,且主碼只含一個(gè)屬性,則R一定為2NF。

②若R£2NF,且只有0~1個(gè)非主屬性,則R一定為3NF。

③3NF一般控制了數(shù)據(jù)冗余,一般防止了操作異常。

范式并非越高越好,適可而止。

數(shù)據(jù)庫設(shè)計(jì)

一、數(shù)據(jù)庫設(shè)計(jì)的步驟

①需求分析:了解分析用戶的需要、要求。

②概念結(jié)構(gòu)設(shè)計(jì):依照需求分析的成果畫概念模型(即E-R圖)。

③邏輯結(jié)構(gòu)設(shè)計(jì):將E-R圖轉(zhuǎn)換為某一個(gè)數(shù)據(jù)模型,并優(yōu)化。

④物理結(jié)構(gòu)設(shè)計(jì)

⑤數(shù)據(jù)庫實(shí)行

(6)數(shù)據(jù)庫運(yùn)行與恢復(fù)

概念結(jié)構(gòu)設(shè)計(jì)

一、局部E-R圖設(shè)計(jì)

1.確定局部范圍

?般把系統(tǒng)包括的各個(gè)部門或各個(gè)重要功效作為局部。

2.確定實(shí)體與屬性

①屬性是不能再分的數(shù)據(jù)項(xiàng);

②聯(lián)系只發(fā)生在兩實(shí)體之間;

③標(biāo)準(zhǔn)上,能夠作為屬性,就不要作為實(shí)體。

二、合并成總體E-R圖

1.消除各局部E-R圖的沖突問題。

2.按公共實(shí)體名合尹,生成初步E-R圖。

3.消除冗余的屬性和冗余的聯(lián)系,生成總體E-R圖。

邏輯結(jié)構(gòu)設(shè)計(jì)

一、聯(lián)系的屬性和主碼

(1)聯(lián)系的屬性:必須包括有關(guān)聯(lián)的各實(shí)體型的主碼。

(2)聯(lián)系的主碼

1:1聯(lián)系:能夠是有關(guān)聯(lián)的任一實(shí)體型的主碼。

1:n聯(lián)系:必須是n方實(shí)體型的主碼。

m:n聯(lián)系:必須是有關(guān)聯(lián)的各實(shí)體型的主碼之和。

二、E-R圖向關(guān)系模型的轉(zhuǎn)換

(1)把每個(gè)實(shí)體型轉(zhuǎn)換為一個(gè)關(guān)系模式。

(2)1:I聯(lián)系:能夠消化到有關(guān)聯(lián)的任一實(shí)體型對(duì)應(yīng)的關(guān)系模式中。

班長(zhǎng)(迎XM,NL,BH)

班級(jí)(四,RS)

(3)1:n聯(lián)系:能夠消化到n方實(shí)體名對(duì)應(yīng)的關(guān)系模式中。

例:一個(gè)班級(jí)有多名學(xué)生,每名學(xué)生只能屬于一個(gè)班級(jí)。每一個(gè)班級(jí)有一名班長(zhǎng),他是

學(xué)生中的一員。

rFr/.T?

學(xué)生(刈,XM,NL,BH)

班級(jí)(BH,RS,平)

?班長(zhǎng)的學(xué)號(hào)

(4)m:n聯(lián)系:必須轉(zhuǎn)換為一個(gè)關(guān)系模式,并且不能消化。

學(xué)生(sno,sname,ssex,sage,sdcpt)

課程(eno,cname,credit)

選修(sno,eno,grade)

(5)多元聯(lián)系:不能消化

物理結(jié)構(gòu)設(shè)計(jì)與數(shù)據(jù)庫實(shí)行

1.物理結(jié)構(gòu)設(shè)計(jì)

在邏輯設(shè)計(jì)的基礎(chǔ)上,為每個(gè)關(guān)系模式選擇適宜的存儲(chǔ)結(jié)構(gòu)與存儲(chǔ)方式。

選擇存儲(chǔ)結(jié)構(gòu):即決定每個(gè)表的統(tǒng)計(jì)次序。

選擇存取方式:即決定為哪些屬性建立非聚集索引,以便加快查找速度。一般把常常查

詢的屬性名指定為非聚集索引。

2.數(shù)據(jù)庫實(shí)行

重要工作:

定義數(shù)據(jù)庫結(jié)構(gòu);

組織數(shù)據(jù)入庫;

編寫應(yīng)用程序;

數(shù)據(jù)庫試運(yùn)行;

SQLServer系統(tǒng)入門

一、運(yùn)行環(huán)境

最低處理器速度:600MHZ(推薦1GB或者更快)

最小內(nèi)存:512MB(推薦1GB或者更大)

可用硬盤空間:1.6GB

二、SQLServer的重要組件

1.服務(wù):用于開啟SQLServer服務(wù)器

單擊“開始”菜單,選擇“控制面板”I“管理工具”|“服務(wù)”選項(xiàng),將“SQLServer

(MSSQLSERVER)”選項(xiàng)置為“自動(dòng)”,即隨操作系統(tǒng)的開啟而自動(dòng)開啟。安裝時(shí)默以為

“自動(dòng)”。

2.配備管理器(ConfigurationManager):用于開啟SQLServer服務(wù)器

注意:“服務(wù)”窗口中顯示的是操作系統(tǒng)中所有的服務(wù)程序,而“配備管理器”窗口中

顯示的僅僅是與SQLServer有關(guān)的服務(wù)程序。

3.SQLServerManagementStudio(SSMS,管理工作室)

組合了對(duì)象資源管理器、查詢編輯器的功效。對(duì)象姿源管理器用于管理數(shù)據(jù)庫服務(wù)器中

的所有數(shù)據(jù)庫對(duì)象:

4.SSMS查詢編輯器:

重要用于輸入、執(zhí)行和保存Transact-SQL命令

創(chuàng)建和使用數(shù)據(jù)庫

一、數(shù)據(jù)庫文獻(xiàn)

1.一個(gè)數(shù)據(jù)庫最少有一個(gè)重要數(shù)據(jù)文獻(xiàn)和一個(gè)事務(wù)日志文獻(xiàn)。假如數(shù)據(jù)庫很大,能夠

使用一個(gè)重要數(shù)據(jù)文獻(xiàn)、多個(gè)次要數(shù)據(jù)文獻(xiàn)和多個(gè)事務(wù)日志文獻(xiàn)。

主數(shù)據(jù)文獻(xiàn)(.mdf)?

m-T--A-/.UMtf.XE3?-*-XX-I_1XZ._I.Zx.

J

次數(shù)據(jù)文獻(xiàn)(.ndf)

事務(wù)日志文獻(xiàn)(.kl「):用來統(tǒng)計(jì)對(duì)數(shù)據(jù)庫對(duì)象的所有更新操作。

2.系統(tǒng)數(shù)據(jù)庫

Master數(shù)據(jù)庫、Model數(shù)據(jù)庫

二、創(chuàng)建數(shù)據(jù)庫

1.打開數(shù)據(jù)庫:

Use數(shù)據(jù)庫名

2.刪除數(shù)據(jù)庫:

Dropdatabase數(shù)據(jù)庫名

三、修改數(shù)據(jù)庫

1.分離和附加數(shù)據(jù)庫

2.備份和還原數(shù)據(jù)庫

3.數(shù)據(jù)的導(dǎo)入和導(dǎo)出?

數(shù)據(jù)庫的備份和恢復(fù)

1.將數(shù)據(jù)庫備份到一個(gè)備份文獻(xiàn)中:

Backupdatabase數(shù)據(jù)庫名todisk=,途徑t文獻(xiàn)名

2.將備份文獻(xiàn)恢復(fù)到數(shù)據(jù)庫中:

Restoredatabase數(shù)據(jù)庫名fromdisk:'途徑'文獻(xiàn)名,

創(chuàng)建和使用表

數(shù)據(jù)類型

1.字符型

char(n):定長(zhǎng)字符型,n表示字符數(shù),取值為1?8000。若缺省n,則默以為1。

varchar(n):變長(zhǎng)字符型

Text:能夠存儲(chǔ)任意長(zhǎng)的字符串

闡明:標(biāo)準(zhǔn)字符型:每個(gè)英文字母、數(shù)字算1個(gè)字符,每個(gè)中文算2個(gè)字符,每個(gè)字符

占1個(gè)字節(jié)。

2.統(tǒng)一碼字符型

每個(gè)英文字母、數(shù)字、中文算1個(gè)字符,每個(gè)字符占2個(gè)字節(jié)。

nchar(n):n表示字符數(shù),取值為1~4000。

nvarchar(n)

ntext:能夠存儲(chǔ)任意長(zhǎng)的統(tǒng)一碼字符串。

例:設(shè)某表的結(jié)構(gòu)如下:

nochar(6),namenchar(6)

則no能夠賦予3個(gè)中文,name能夠賦予6個(gè)中文

3.整型

取值范圍所占字節(jié)數(shù)

Bigint8

Ini4

Smallint-32768?+327672

Tinyint0-2551

bit0,1即邏輯型

4.實(shí)型

①精準(zhǔn)數(shù)值型

Decimal(p.s)

Nnmeric(p,s)

精度P:表示所有數(shù)字的位數(shù)(不計(jì)小數(shù)點(diǎn)和正負(fù)號(hào))

S:表示小數(shù)位數(shù),若缺省S,則默以為。

P-S:表示整數(shù)位數(shù)

②近似數(shù)值型

Real精準(zhǔn)到7位有效數(shù)字

Float精準(zhǔn)到15位有效數(shù)字

5.貸幣型

Money:占8個(gè)字節(jié),保存4位小數(shù)

Smallmoney:占4個(gè)字節(jié),保存4位小數(shù)

字符串常量:由單引號(hào)括住的字符序列

貸幣型常量:能夠是一個(gè)實(shí)型常量

6.日期時(shí)間型

Datetime>Smalldatetiinc

①若省略日期部分,則默以為:‘1900-1-r

若省略時(shí)間部分,則默以為:’00:00:00'

②日期格式:'yyyy-mm-dd'

時(shí)間格式:‘hh:n】m:ss,

使用對(duì)象資源管理器創(chuàng)建和管理表

一、創(chuàng)建表

1.在一個(gè)表中只能定義一個(gè)標(biāo)識(shí)字段。

2.只有整型和精準(zhǔn)數(shù)值型(decimal、numeric)字段才能指定為標(biāo)識(shí)字段。

3.把某個(gè)字段指定為公式字段。

二、設(shè)置約束

1.主鍵約束:

每個(gè)表中只能有一列或一個(gè)組合被指定為主鍵,主健中的各個(gè)列不能為空值。

2.外鍵約束:

創(chuàng)建外鍵約束,就是定義兩個(gè)表的永久關(guān)聯(lián),這兩個(gè)表分別稱為主鍵表、外鍵表。外鍵

表中外鍵的值只能是主鍵表中主鍵的有效值或空值。

3.唯一性約束:

主鍵約束與唯一性約束的區(qū)分是:

(I)在一個(gè)表中只能定義一個(gè)主鍵約束,但可定義多個(gè)唯一性約束;

(2)指定為主鍵約束的列不能取空值,但指定為唯一性約束的列允許取空值.

4.唯一性約束:

用于限制輸入到一列或多列的值的范圍,確保數(shù)據(jù)庫的數(shù)據(jù)完整性。

5.默認(rèn)值約束:

T-SQL

一、SQL語言的特點(diǎn)

①SQL語言集數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)控制的功效于?體。

動(dòng)詞

數(shù)據(jù)定義Create>drop

數(shù)據(jù)查詢select

數(shù)據(jù)操縱Insert、deletesupdate

數(shù)據(jù)控制Grant、revoke

②所有的DBMS都支持SQL語言。

T-SQL基礎(chǔ)

一、創(chuàng)建和使用數(shù)據(jù)庫

1.創(chuàng)建數(shù)據(jù)庫

createdatabase數(shù)據(jù)庫名

2.使用數(shù)據(jù)庫

Use數(shù)據(jù)庫名

3.刪除數(shù)據(jù)庫

dropdatabase數(shù)據(jù)庫名

二、定義表

1.創(chuàng)建表

createtable表名(屬性名類型,…,屬性名類型)

①指定標(biāo)識(shí)字段:identity[標(biāo)識(shí)種子,標(biāo)識(shí)增最)

②指定公式字段:屬性名as體現(xiàn)式

例:createtablestudent

(nointidentity(l,l),

namechar(6),

chismallint,

matsmallint.

scoreaschi+mat)

2.刪除表

droptable表名,…,表名

三、select語句

select*/體現(xiàn)式表

[into新表]

from表名,…,表名

[where條件]

[groupby屬性名]

[having條件]

[orderby屬性名|[Asc/Descl

1.Select子句

①*代表所有屬性名

②若一個(gè)屬性名來自多個(gè)表,則屬性名前須冠以表名,格式為:表名.屬性名

③設(shè)置體現(xiàn)式的別名:

體現(xiàn)式As別名

?限制杳詢成果的統(tǒng)計(jì)行數(shù):

all返回所有統(tǒng)計(jì)

topn返回前面n號(hào)統(tǒng)計(jì)

distinct表示取消重復(fù)行

闡明:topn只能放在核心字select的背面;

all、distinct只能放在核心字select或聚合函數(shù)的背面。

2.Where子句

①in的格式:屬性名in1常量,…,常量)

②like的格式:屬性名like通配字符串

通配符有%表示0個(gè)或多個(gè)字符

-表示1個(gè)字符

③在Where子句中指定連接:

Where表名1.屬性名=表名2.屬性名

3.Orderby子句

orderby屬性名1[Asc/Desc],屬性名2[Asc/Desc]

4.聚合函數(shù)

①sum(屬性名):縱向求數(shù)值型屬性之和。

②avg(屬性名)

③count(*)返回表的統(tǒng)計(jì)行數(shù)(含重復(fù)行)。

count(屬性名)返回指定列中取非NULL值的單元格數(shù)目。

count(distinct屬性名)返回指定列中取非NULL值、非重復(fù)的單元格數(shù)目。

④max(屬性名)

⑤min(屬性名)

5.Groupby子句

使用Groupby子句時(shí),Select子句只能使用分組項(xiàng)字段和聚合函數(shù)

例:以性別為分組項(xiàng),求每一組的平均年齡。

Selectssex,avg(sage)as平均年齡

Fromstudent

Groupbyssex

6.Having子句

①Having子句只能跟在Groupby子句之后,旦只能使用聚合函數(shù)和分組項(xiàng)字段。

@where子句放在Groupby子句之前,甚至能夠沒有Groupby子句:旦不能包括聚合

函數(shù)。

例:以系別為分組項(xiàng),查詢學(xué)生平均年齡不小于19歲的系的系名,平均年齡。

Selectsdept,avg(sage)as平均年齡

Fromstudent

Groupbysdcpt

Havingavg(sdept)>19

7.into子句

功效:將查詢成果保存到新的基表中。

一、查詢的分類

J單表查詢

〔連接查詢

嵌套杳詢

1.連接查詢:在where子句中指定連接

where表名I.屬性名=表名2.屬性名

2.嵌套查詢

①嵌套查詢的特點(diǎn)

?每級(jí)查詢的from子句一般只包括一個(gè)表名。

?一個(gè)嵌套查詢總能夠分解為若干個(gè)單表查詢,總能夠改寫成連接查詢。

?若查詢成果顯示的屬性名來自一個(gè)表,才能夠?qū)懗汕短撞樵儭?/p>

?子查詢不能使用orderby子句,orderby只能用于最頂層的查詢。

②在where子句中指定子查詢

where屬性名[not]in(子查詢):子查詢返回一列多行。

where屬性名=(子查詢):子查詢返回一列?行。

where[not]exists(子查詢):子查詢返回多列多行。

五、數(shù)據(jù)操縱

1.insert語句

(1)每次插入一條統(tǒng)計(jì)

insertinto表名[(屬性名表)]values(體現(xiàn)式表)

(2)插入子查詢的成果

insertinto表名[(屬性名表)]

子查詢

例:insertintostudent

select*fromstudent1

2.update語句

update表名set屬性名=值,…,屬性名=值[where條件]

缺省where子句,默認(rèn)為更新所有統(tǒng)計(jì)。

3.delete語句

deletefrom表名[where條件]

T-SQL程序設(shè)計(jì)基礎(chǔ)

一、常量:

'字符型:由單引號(hào)括住,例:‘chin"

Y

整型

實(shí)型

日期型:由單引號(hào)括住的具備日期或時(shí)間意義的序列,格式為:

'yyyy-mm-dd','hh:mm:ss'

二、變量:

Y局部變量:由用戶定義和賦值,以@開頭。

V—

全局變量:由系統(tǒng)定義和賦值,以@@開頭。

1.申明局部變量

Declare變量名類型

例:declare@aint,@bchar(5)

注:不要把局部變量申明為text、ntext^image

2.給局部變量賦值

①使用set語句:

Set變量名=體現(xiàn)式

②使用select語句

Select變量名=體現(xiàn)式、....,變量名=體現(xiàn)式

Ifrom表名]

若體現(xiàn)式中含有屬性名,則必須使用from子句。

例:declare@achar(5),@bchar(6)

Select@a=9500「,@b='王名’

或:select@a=sno,@b=sname

Fromstudent

3.輸出體現(xiàn)式的值:

①使用print語句

Print體現(xiàn)式

②使用seleci語句

Select體現(xiàn)式,...>體現(xiàn)式

[from表名]

例:A)select@a,@b

B)selectsno,snamc

Fromstudent

C)selectsnoas學(xué)號(hào),snameas姓名

Fromstudent

等價(jià)于:select學(xué)號(hào)=sno,姓名二sname

Fromstudent

4.局部變量的作用域:

只能在申明它的批處理中使用。

例:Usestud

Go

Declare@aint

Set@a=5

Print@a

Go

Declare@achar(5)

Set@a='張三'

Print@a

三、運(yùn)算符:

算術(shù)運(yùn)算符(*、/、%—+、-)

I

關(guān)系運(yùn)算符(>、>=、<、<=、=、<>)

I

邏輯運(yùn)算符(notfand-*or)

批處理

1.什么叫批處理?

一個(gè)腳本由一個(gè)或多個(gè)批處理組成,批處理以GO作為結(jié)束標(biāo)志。

2.批處理是腳本的編譯單位,當(dāng)一個(gè)批處理中的某個(gè)語句出現(xiàn)編譯錯(cuò)誤,則批處理中的任

何語句均無法執(zhí)行。

3.當(dāng)一個(gè)批處理中的某個(gè)語句出現(xiàn)運(yùn)行錯(cuò)誤,則批處理中目前語句和它之后的語句將無法

執(zhí)行。

流程控制語句

一、begin…end語句

Begin

語句1

語句n

End

二、if-else語句

1.格式:if邏輯體現(xiàn)式

語句1

[else

語句2J

2.當(dāng)邏輯體現(xiàn)式包括子查詢時(shí),子查詢必須用括號(hào)括住。

屬性名in(子查詢)子查詢返回一列多行

屬性名=(子查詢)子查詢返回一列一行

Exists(子查詢)子查詢返回多列多行

.三、case體現(xiàn)式

Case

When邏輯體現(xiàn)式1then成果1

When邏輯體現(xiàn)式2then成果2

(else成果n]

End

闡明:case體現(xiàn)式不是語句,不能單獨(dú)執(zhí)行。

例:usestud

Select姓名二snamc,系別二

Case

Whensdept='CS'then'計(jì)算機(jī)科學(xué)系,

Whensdept='IS'then'信息系統(tǒng)系,

Whensdcpt='MA'then'數(shù)學(xué)系,

End

四、while語句

1.格式:

While邏輯體現(xiàn)式

Begin

語句組

End

2.專用于循環(huán)體的語句:

Break強(qiáng)制退出while語句,執(zhí)行其后續(xù)語句。

Continue返回while語句的入口。

Break、Continue必須放在循環(huán)體內(nèi),并常與if-else語句結(jié)合使用。

二、其他語句

1.Return語句

格式:Return(整數(shù)值)

功效:用于存儲(chǔ)過程或批處理中,功效是退出所在的存儲(chǔ)過程或批處理。

闡明:當(dāng)用于存儲(chǔ)過程時(shí),若沒有為Return指定整數(shù)值,則默以為0。

2.存儲(chǔ)過程

①創(chuàng)建存儲(chǔ)過程

Createprocedure存儲(chǔ)過程名[@形參名類型]

AsSQL語句序列

②執(zhí)行存儲(chǔ)過程

Exec存儲(chǔ)過程名[常量|@變量名]:

③刪除存儲(chǔ)過程

Dropprocedure存儲(chǔ)過程名

④闡明:存儲(chǔ)過程不返回值,或者只能返回整數(shù)值;而函數(shù)可返回任意類型的值。

3.Waitfor語句

函數(shù)

1.創(chuàng)建函數(shù)

createfunction函數(shù)名(@形參名類型)returns類型

as

begin

函數(shù)體

End

注:①函數(shù)體最后一條語句必須是retum語句。

②兩類函數(shù):標(biāo)量函數(shù)、內(nèi)嵌表值函數(shù)

2.執(zhí)行函數(shù)

Exec@變量名1=函數(shù)名常量|@變量名

Print函數(shù)名(常圜@變量名)

3.刪除函數(shù)

Dropfunction函數(shù)名

附加練習(xí)題9

一、定義表:

1.SQLServer中建立一個(gè)數(shù)據(jù)庫stu。

2.使用企業(yè)管理器中創(chuàng)建如下三個(gè)表。

student表

Snosnamessexsagesdept

95001李勇男20CS

95002劉晨女19IS

95003土名女18MA

95004張立男18CS

Course表

enocnamccredit

1數(shù)據(jù)庫原理4

2操作系統(tǒng)3

3Java程序設(shè)計(jì)3

4匯編語言2

Sc表

SnoCnograde

95001185

95001288

95001382

95002190

95002380

二、查詢表:

1.查詢?nèi)w學(xué)生的姓名及出生年份。

2.查詢年齡小于19歲的男學(xué)生的學(xué)號(hào),姓名。

3.查詢選修了課程的學(xué)生人數(shù)。

[提示:selectcount(distinctsno)fromscj

4.查詢所有選修過課的學(xué)生的學(xué)號(hào)、姓名。

5.查詢數(shù)學(xué)系(MA)、計(jì)算機(jī)科學(xué)系(CS)的學(xué)生的姓名和性別。

6.查詢年齡最大的2名學(xué)生情況

7.查詢姓“劉”的學(xué)生情況。

8.以性別為分類項(xiàng),查詢每一類的平均年齡。

9.查詢選修了課程名為“操作系統(tǒng)”的學(xué)生的學(xué)號(hào)、姓名。

10.查詢年齡低于平均年蛤的所有學(xué)生的姓名、系別

三、操縱表:

1.在企業(yè)管理器中創(chuàng)建一個(gè)新表student1:

Snosnamessexsagesdept

95005王虹女19CS

95006萬亮男20MA

2.將student1表插入到student表的背面。

[提示:insertintostudentselect*fromstudent1]

3.將(95020,陳冬,男,18,IS)插入到student表中c

4.刪除siudentl表中的所有統(tǒng)計(jì),使之成為空表。

5.把student表中所有男生統(tǒng)計(jì)復(fù)制到空表siudenll中。

6.把student表中所有女生統(tǒng)計(jì)復(fù)制到新表student2中。

7.將所有學(xué)生的年齡增加1歲。

8.將計(jì)算機(jī)科學(xué)系全體學(xué)生的成績(jī)置()。

[提示:updatescsetgrade=0

wheresnoin(selectsnofromstudentwheresdept=,CS,)

9.刪除學(xué)號(hào)為95020的學(xué)生統(tǒng)計(jì)。

10.刪除計(jì)算機(jī)科學(xué)系所有學(xué)生的選課統(tǒng)計(jì)。

T-SQL高級(jí)應(yīng)用

一、查詢的分類

[單表查詢

〔連接查詢

嵌套查詢

一、連接查詢:在where子句中指定連接

1.內(nèi)連接:where表名1.屬性名=表名2.屬性名

2.自身連接:給一個(gè)表取兩個(gè)別名,where子句的格式為:

where別名1.屬性名二別名2.屬性名

3.左外連接:where表名I.屬性名*=表名2.屬性名

意義:查詢成果包括了表1的所有統(tǒng)計(jì)和表2滿足條件的統(tǒng)計(jì)。

4.右外連接:where表名1.屬性名=*表名2.屬性名

意義:杳詢成果包括了表2的所有統(tǒng)計(jì)和表1滿足條件的統(tǒng)計(jì)。

三、連接查詢:在from子句中指定連接

1.內(nèi)連接:from表名Iinnerjoin表名2on條件

例:select*

fromstudent,sc

wherestudcnt.sno=sc.sno

等價(jià)于select*

fromstudentinnerjoinsc

onstudcnt.sno=sc.sno

2.左外連接:from表名1lefloulerjoin表名2on條件

3.右外連接:from表名1rightouterjoin表名2on條件

4.完全外連接:from表名1full[outer]join表名2on條件

5.交叉連接

四、嵌套查詢

事務(wù)處理

1.什么叫事務(wù)?

事務(wù)是用戶定義的一組操作序列。

①事務(wù)是并發(fā)控制囪基本單位。

②一個(gè)事務(wù)包括的話操作要么都執(zhí)行,要么都不執(zhí)行。

2.事務(wù)的屬性

原子性:指事務(wù)中包括的諸操作要么都執(zhí)行,要么都不執(zhí)行。

一致性:事務(wù)必須使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。

隔離性:一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。

持久性

3.顯式定義事務(wù)

begintransaction[事務(wù)名]

commit/rollback[transaction事務(wù)名]

當(dāng)未顯式指定事務(wù),則一個(gè)SQL語句就是一個(gè)事務(wù)。

4.在事務(wù)內(nèi)設(shè)置保存點(diǎn)

begintransaction

savetransaction保存點(diǎn)名

rollbacktransaction保存點(diǎn)名

功效:將保存點(diǎn)到rollback子句之間的SQL操作回滾拽。

數(shù)據(jù)的鎖定

一、并發(fā)操作與數(shù)據(jù)不一致性

1.數(shù)據(jù)不一致性包括三類

丟失修改:指事務(wù)I與事務(wù)2從數(shù)據(jù)庫中讀入同一數(shù)據(jù)并修改,事務(wù)2的提交成果破壞

事務(wù)1提交的成果,導(dǎo)致事務(wù)1的修改被丟失。

不可重復(fù)讀:指事務(wù)1讀取數(shù)據(jù)后,事務(wù)2執(zhí)行更新操作,使事務(wù)1無法再現(xiàn)前一次讀

取成果。

讀臟數(shù)據(jù):指事務(wù)1修改某一數(shù)據(jù)后,事務(wù)2讀取該數(shù)據(jù),事務(wù)1因?yàn)槟撤N原因被撤消,

這時(shí)數(shù)據(jù)又恢復(fù)到原值,事務(wù)2讀到的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)不一致,稱為“臟”數(shù)據(jù)。

2.產(chǎn)生數(shù)據(jù)不一致性的原因

并發(fā)操作破壞了事務(wù)的隔離性。

二、并發(fā)控制的目標(biāo)、措施

I.目標(biāo):確保DB中的數(shù)據(jù)一致性。

2.并發(fā)事務(wù)正確性的標(biāo)準(zhǔn)

幾個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其成果與任何一個(gè)串行執(zhí)行的成果相同。

3.并發(fā)控制的措施

DBMS一般采取“封鎖”技術(shù),確保并發(fā)操作的可呂行化。

二、封鎖(Locking)

1.什么叫封鎖?

SQLServer自動(dòng)強(qiáng)制封鎖,并且會(huì)將封鎖粒度控制在適宜的級(jí)別,用戶無須考慮封鎖問題。

2.封鎖類型

f排它鎖(X鎖):事務(wù)T對(duì)數(shù)據(jù)A加X鎖,其他事務(wù)不能再對(duì)A加鎖,即其他事務(wù)不能

I讀取和修改Ao

共享鎖(S鎖):事務(wù)T對(duì)數(shù)據(jù)A加S鎖,其他事務(wù)只能再對(duì)A加S鎖,即其他事務(wù)只

能讀A,不能修改A。

3.封鎖粒度

封鎖對(duì)象能夠是屬性列、元組、關(guān)系、整個(gè)數(shù)據(jù)庫.封鎖對(duì)象的大小稱為封鎖粒度。

封鎖粒度越小,并發(fā)度越高,但并發(fā)控制的開銷越大。

4.封鎖協(xié)議

①事務(wù)T在修改數(shù)據(jù)A之前,必須對(duì)其加X鎖,直到事務(wù)結(jié)束才釋放。

②事務(wù)T在讀取數(shù)據(jù)A之前,必須對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。

遵照封鎖協(xié)議,能夠處理三種數(shù)據(jù)不一致性問題:

去失修改

不可重復(fù)讀

讀“臟”數(shù)據(jù)

四、死鎖和活鎖

封鎖技術(shù)能夠處理并發(fā)操作的不?致性問題,但也帶來新的問題,即死鎖和活鎖。

1.死鎖:

①定義:兩個(gè)事務(wù)已經(jīng)各自鎖定一個(gè)數(shù)據(jù),不過乂要訪問被對(duì)方鎖定的數(shù)據(jù),導(dǎo)致了

循環(huán)等候,稱為死鎖。

②防止死鎖的措施:

次序封鎖法:若要求封鎖次序?yàn)锳,B,則Tl,T2只能先封鎖A,再封鎖B。

2.活鎖:

①定義:若多個(gè)事務(wù)祈求封鎖同一個(gè)數(shù)據(jù)時(shí),其中的某個(gè)事務(wù)總處在等候狀態(tài),則稱

為活鎖。

②防止活鎖的措施:先來先服務(wù)

使用游標(biāo)

一、游標(biāo)的概念

1.每個(gè)表都有一個(gè)游標(biāo),它能夠指向表的任意一條統(tǒng)計(jì)。

2.移動(dòng)游標(biāo)的措施:

①在觸發(fā)器或存儲(chǔ)過程中,使用SQL語句定義和使用游標(biāo)。

②在前臺(tái)應(yīng)用程序中,使用主語言實(shí)現(xiàn)對(duì)游標(biāo)的移動(dòng)。

二、Transacl-SQL游標(biāo)的使用:

I.申明游標(biāo)

Declare游標(biāo)名cursor

[forward_only/scroll]fglobal/local]

[read_only]

forselect語句

{forward_only(只進(jìn)游標(biāo)):只能進(jìn)行nexl操作,缺省為forward_oMy。

scroll(滾動(dòng)游標(biāo))

[global/local]:缺省為:global

2.打開游標(biāo)

open游標(biāo)名

打開游標(biāo)時(shí),游標(biāo)指向查詢成果集的第一條統(tǒng)計(jì)之前。

3.提取游標(biāo)

fetch[next/prior/first/last]from游標(biāo)名

[into局部變量名表]

①缺省into子句:移動(dòng)游標(biāo),并顯示目前統(tǒng)計(jì)的內(nèi)容。

②含into子句:移動(dòng)游標(biāo),并將目前統(tǒng)計(jì)各屬性值依次賦給局部變量。

③缺省游標(biāo)移動(dòng)方式,則為next。

4.關(guān)閉游標(biāo)

close游標(biāo)名

5.釋放游標(biāo)

deciaredeciare游標(biāo)名

例:-打印student表中全體男生的平均年齡。(不得使用聚合函數(shù)。)

setnocounton

declare@xint,@sint.@ndecimal(4,l)

select@n=0,@s=0

declarepmcursor

scroll

forselectsagefromstudentwheressex='男'

openpin

fetchnextfrompminto@x

while@@FETCH_STATUS=O

begin

select@n=@n+l,@s=@s+@x

fetchnextfrompminto@x

end

prin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論