第6章 SQL高級(jí)應(yīng)用_第1頁(yè)
第6章 SQL高級(jí)應(yīng)用_第2頁(yè)
第6章 SQL高級(jí)應(yīng)用_第3頁(yè)
第6章 SQL高級(jí)應(yīng)用_第4頁(yè)
第6章 SQL高級(jí)應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩81頁(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、電子商務(wù)數(shù)據(jù)庫(kù)技術(shù)華北科技學(xué)院 李文武22021年11月10日星期三6.1.1數(shù)據(jù)匯總數(shù)據(jù)匯總1.聚合函數(shù):對(duì)一組值操作,返回單一的匯總值。聚合函數(shù):對(duì)一組值操作,返回單一的匯總值。聚合函數(shù)在如下情況下,允許作為表達(dá)式使用:聚合函數(shù)在如下情況下,允許作為表達(dá)式使用:(1)select語(yǔ)句的選擇列表語(yǔ)句的選擇列表(子查詢或外部查詢子查詢或外部查詢)。(2)compute或或compute by子句。子句。(3)having子句。子句。華北科技學(xué)院 李文武32021年11月10日星期三ncompute子句用于分類匯總,格式為:子句用于分類匯總,格式為:compute聚合函數(shù)名聚合函數(shù)名(expre

2、ssion),.nby expression,.nn其中其中expression是列名;是列名;compute將產(chǎn)生將產(chǎn)生額外的匯總行。額外的匯總行。ncompute by子句可以用同一子句可以用同一select語(yǔ)句語(yǔ)句既查看明細(xì)行,又查看匯總行??捎?jì)算分組的既查看明細(xì)行,又查看匯總行。可計(jì)算分組的匯總值,也可計(jì)算整個(gè)結(jié)果集的匯總值。匯總值,也可計(jì)算整個(gè)結(jié)果集的匯總值。華北科技學(xué)院 李文武42021年11月10日星期三n當(dāng)當(dāng) compute 帶有可選的帶有可選的 by 子句時(shí),符合子句時(shí),符合 select 條件的每個(gè)組都有兩個(gè)結(jié)果集:條件的每個(gè)組都有兩個(gè)結(jié)果集: 每個(gè)組的第一個(gè)結(jié)果集是明細(xì)行

3、集,其中包含該組的選擇列每個(gè)組的第一個(gè)結(jié)果集是明細(xì)行集,其中包含該組的選擇列表信息。表信息。每個(gè)組的第二個(gè)結(jié)果集有一行,其中包含該組的每個(gè)組的第二個(gè)結(jié)果集有一行,其中包含該組的 compute 子句中所指定的聚合函數(shù)的小計(jì)。子句中所指定的聚合函數(shù)的小計(jì)。 n當(dāng)當(dāng) compute 不帶可選的不帶可選的 by 子句時(shí),子句時(shí),select 語(yǔ)句語(yǔ)句有兩個(gè)結(jié)果集:有兩個(gè)結(jié)果集: 每個(gè)組的第一個(gè)結(jié)果集是包含選擇列表信息的所有明細(xì)行。每個(gè)組的第一個(gè)結(jié)果集是包含選擇列表信息的所有明細(xì)行。第二個(gè)結(jié)果集有一行,其中包含第二個(gè)結(jié)果集有一行,其中包含 compute 子句中所指定的子句中所指定的聚合函數(shù)的合計(jì)。聚

4、合函數(shù)的合計(jì)。 華北科技學(xué)院 李文武52021年11月10日星期三ngroup by 生成單個(gè)結(jié)果集。每個(gè)組都有一個(gè)只包含生成單個(gè)結(jié)果集。每個(gè)組都有一個(gè)只包含分組依據(jù)列和顯示該組子聚合的聚合函數(shù)的行。選擇列分組依據(jù)列和顯示該組子聚合的聚合函數(shù)的行。選擇列表只能包含分組依據(jù)列和聚合函數(shù)。表只能包含分組依據(jù)列和聚合函數(shù)。ncompute 生成多個(gè)結(jié)果集。生成多個(gè)結(jié)果集。一類結(jié)果集包含每個(gè)組的明細(xì)行,其中包含選擇列表中的表一類結(jié)果集包含每個(gè)組的明細(xì)行,其中包含選擇列表中的表達(dá)式。達(dá)式。另一類結(jié)果集包含組的子聚合,或另一類結(jié)果集包含組的子聚合,或 select 語(yǔ)句的總聚合。語(yǔ)句的總聚合。選擇列表可包

5、含除分組依據(jù)列或聚合函數(shù)之外的其它表達(dá)式。選擇列表可包含除分組依據(jù)列或聚合函數(shù)之外的其它表達(dá)式。聚合函數(shù)在聚合函數(shù)在 compute 子句中指定,而不是在選擇列表中。子句中指定,而不是在選擇列表中。華北科技學(xué)院 李文武62021年11月10日星期三n指定用來(lái)放置輸出行的組,并且如果指定用來(lái)放置輸出行的組,并且如果 select 子句子句 中包含聚合函數(shù),則計(jì)算每中包含聚合函數(shù),則計(jì)算每組的匯總值。指定組的匯總值。指定 group by 時(shí),選擇列表中時(shí),選擇列表中任一非聚合表達(dá)式內(nèi)的所有列都應(yīng)包含在任一非聚合表達(dá)式內(nèi)的所有列都應(yīng)包含在 group by 列表中,或者列表中,或者 group b

6、y 表達(dá)式表達(dá)式必須與選擇列表表達(dá)式完全匹配。必須與選擇列表表達(dá)式完全匹配。n語(yǔ)法語(yǔ)法 group by all group_by_expression ,.n with cube | rollup 華北科技學(xué)院 李文武72021年11月10日星期三nall:包含所有組和結(jié)果集,甚至包含那些任何行都不:包含所有組和結(jié)果集,甚至包含那些任何行都不滿足滿足 where 子句指定的搜索條件的組和結(jié)果集。如子句指定的搜索條件的組和結(jié)果集。如果指定了果指定了 all,將對(duì)組中不滿足搜索條件的匯總列返,將對(duì)組中不滿足搜索條件的匯總列返回空值。不能用回空值。不能用 cube 或或 rollup 運(yùn)算符指定運(yùn)

7、算符指定 all。 如果訪問(wèn)遠(yuǎn)程表的查詢中有如果訪問(wèn)遠(yuǎn)程表的查詢中有 where 子句,則不支持子句,則不支持 group by all 操作。操作。ngroup_by_expression:是對(duì)其執(zhí)行分組的表達(dá)式。是對(duì)其執(zhí)行分組的表達(dá)式。group_by_expression 也稱為分組列。也稱為分組列。group_by expression 可以是列或引用列的非聚合表達(dá)式。在選可以是列或引用列的非聚合表達(dá)式。在選擇列表內(nèi)定義的列的別名不能用于指定分組列。擇列表內(nèi)定義的列的別名不能用于指定分組列。 華北科技學(xué)院 李文武82021年11月10日星期三ncube:指定在結(jié)果集內(nèi)不僅包含由:指定在

8、結(jié)果集內(nèi)不僅包含由 group by 提供提供的正常行,還包含匯總行。在結(jié)果集內(nèi)返回每個(gè)可能的的正常行,還包含匯總行。在結(jié)果集內(nèi)返回每個(gè)可能的組和子組組合的組和子組組合的 group by 匯總行。匯總行。group by 匯匯總行在結(jié)果中顯示為總行在結(jié)果中顯示為 null,但可用來(lái)表示所有值。使,但可用來(lái)表示所有值。使用用 grouping 函數(shù)確定結(jié)果集內(nèi)的空值是否是函數(shù)確定結(jié)果集內(nèi)的空值是否是 group by 匯總值。匯總值。nrollup:指定在結(jié)果集內(nèi)不僅包含由:指定在結(jié)果集內(nèi)不僅包含由 group by 提提供的正常行,還包含匯總行。按層次結(jié)構(gòu)順序,從組內(nèi)供的正常行,還包含匯總行

9、。按層次結(jié)構(gòu)順序,從組內(nèi)的最低級(jí)別到最高級(jí)別匯總組。組的層次結(jié)構(gòu)取決于指的最低級(jí)別到最高級(jí)別匯總組。組的層次結(jié)構(gòu)取決于指定分組列時(shí)所使用的順序。更改分組列的順序會(huì)影響在定分組列時(shí)所使用的順序。更改分組列的順序會(huì)影響在結(jié)果集內(nèi)生成的行數(shù)。結(jié)果集內(nèi)生成的行數(shù)。華北科技學(xué)院 李文武92021年11月10日星期三n通過(guò)聯(lián)接根據(jù)各表間的邏輯關(guān)系從兩個(gè)或多個(gè)通過(guò)聯(lián)接根據(jù)各表間的邏輯關(guān)系從兩個(gè)或多個(gè)表中檢索數(shù)據(jù)。表中檢索數(shù)據(jù)。n定義方法:定義方法:可以在可以在from 或或where子句中使用比較運(yùn)算符給子句中使用比較運(yùn)算符給出聯(lián)接條件對(duì)表進(jìn)行聯(lián)接。出聯(lián)接條件對(duì)表進(jìn)行聯(lián)接。指定各表中用于聯(lián)接的列。指定各表中

10、用于聯(lián)接的列。比較符可以是比較符可以是、=、!=、!聯(lián)接條件與聯(lián)接條件與where和和having子句的搜索條件配子句的搜索條件配合完成查詢。查詢所選的行首先通過(guò)合完成查詢。查詢所選的行首先通過(guò) from 子句子句聯(lián)接條件進(jìn)行篩選,其次由聯(lián)接條件進(jìn)行篩選,其次由 where 子句搜索條子句搜索條件篩選,然后由件篩選,然后由 having 子句搜索條件篩選子句搜索條件篩選 。華北科技學(xué)院 李文武102021年11月10日星期三n僅顯示兩個(gè)聯(lián)接表中的匹配行的聯(lián)接。是查詢僅顯示兩個(gè)聯(lián)接表中的匹配行的聯(lián)接。是查詢分析器中的默認(rèn)聯(lián)接類型。分析器中的默認(rèn)聯(lián)接類型。n當(dāng)創(chuàng)建內(nèi)聯(lián)接時(shí),包含當(dāng)創(chuàng)建內(nèi)聯(lián)接時(shí),包含

11、 null 的列不與任何的列不與任何值匹配,因此不包括在結(jié)果集內(nèi)??罩挡慌c其值匹配,因此不包括在結(jié)果集內(nèi)??罩挡慌c其它的空值匹配。它的空值匹配。 n關(guān)鍵詞為:關(guān)鍵詞為:inner join華北科技學(xué)院 李文武112021年11月10日星期三n包括在聯(lián)接表中沒(méi)有相關(guān)行的行的聯(lián)接。包括在聯(lián)接表中沒(méi)有相關(guān)行的行的聯(lián)接。 n左向外聯(lián)接:包括第一個(gè)命名表(左向外聯(lián)接:包括第一個(gè)命名表(“左左”表,表,出現(xiàn)在出現(xiàn)在 join 子句的最左邊)中的所有行。不子句的最左邊)中的所有行。不包括右表中的不匹配行。包括右表中的不匹配行。left joinn右向外聯(lián)接:包括第二個(gè)命名表(右向外聯(lián)接:包括第二個(gè)命名表(“

12、右右”表,表,出現(xiàn)在出現(xiàn)在 join 子句的最右邊)中的所有行。不子句的最右邊)中的所有行。不包括左表中的不匹配行。包括左表中的不匹配行。right joinn完整外部聯(lián)接:包括所有聯(lián)接表中的所有行,完整外部聯(lián)接:包括所有聯(lián)接表中的所有行,不論它們是否匹配。不論它們是否匹配。full join 華北科技學(xué)院 李文武122021年11月10日星期三n在這類聯(lián)接的結(jié)果集內(nèi),兩個(gè)表中每?jī)蓚€(gè)可能在這類聯(lián)接的結(jié)果集內(nèi),兩個(gè)表中每?jī)蓚€(gè)可能成對(duì)的行占一行。成對(duì)的行占一行。 n交叉聯(lián)接不使用交叉聯(lián)接不使用where子句。子句。華北科技學(xué)院 李文武132021年11月10日星期三n子查詢是一個(gè)子查詢是一個(gè) se

13、lect 查詢,它返回單個(gè)值查詢,它返回單個(gè)值且嵌套在且嵌套在 select、insert、update、delete 語(yǔ)句或其它子查詢中。任何允許使語(yǔ)句或其它子查詢中。任何允許使用表達(dá)式的地方都可以使用子查詢。用表達(dá)式的地方都可以使用子查詢。 n子查詢也稱為內(nèi)部查詢或內(nèi)部選擇,而包含子子查詢也稱為內(nèi)部查詢或內(nèi)部選擇,而包含子查詢的語(yǔ)句也稱為外部查詢或外部選擇。查詢的語(yǔ)句也稱為外部查詢或外部選擇。 華北科技學(xué)院 李文武142021年11月10日星期三n嵌套在外部嵌套在外部 select 語(yǔ)句中的子查詢包括以下語(yǔ)句中的子查詢包括以下組件:組件: 包含標(biāo)準(zhǔn)選擇列表組件的標(biāo)準(zhǔn)包含標(biāo)準(zhǔn)選擇列表組件的標(biāo)

14、準(zhǔn) select 查詢。查詢。包含一個(gè)或多個(gè)表或者視圖名的標(biāo)準(zhǔn)包含一個(gè)或多個(gè)表或者視圖名的標(biāo)準(zhǔn) from 子句。子句??蛇x的可選的 where 子句。子句。可選的可選的 group by 子句。子句??蛇x的可選的 having 子句。子句。n子查詢的子查詢的 select 查詢總是使用圓括號(hào)括起來(lái)。查詢總是使用圓括號(hào)括起來(lái)。且不能包括且不能包括 compute 或或 for browse 子子句,如果同時(shí)指定句,如果同時(shí)指定 top 子句,則可能只包括子句,則可能只包括 order by 子句。子句。 華北科技學(xué)院 李文武152021年11月10日星期三n子查詢可以嵌套在外部子查詢可以嵌套在外

15、部 select、insert、update 或或 delete 語(yǔ)句的語(yǔ)句的 where 或或 having 子句內(nèi),或者其它子查詢中。子句內(nèi),或者其它子查詢中。n盡管根據(jù)可用內(nèi)存和查詢中其它表達(dá)式的復(fù)雜盡管根據(jù)可用內(nèi)存和查詢中其它表達(dá)式的復(fù)雜程度不同,嵌套限制也有所不同,但嵌套到程度不同,嵌套限制也有所不同,但嵌套到 32 層是可能的。層是可能的。n如果某個(gè)表只出現(xiàn)在子查詢中而不出現(xiàn)在外部如果某個(gè)表只出現(xiàn)在子查詢中而不出現(xiàn)在外部查詢中,那么該表中的列就無(wú)法包含在輸出中查詢中,那么該表中的列就無(wú)法包含在輸出中(外部查詢的選擇列表)。(外部查詢的選擇列表)。 華北科技學(xué)院 李文武162021年

16、11月10日星期三n有三種基本的子查詢。它們是:有三種基本的子查詢。它們是: 在通過(guò)在通過(guò) in 引入的列表或者由引入的列表或者由 any 或或 all 修改的比修改的比較運(yùn)算符的列表上進(jìn)行操作。較運(yùn)算符的列表上進(jìn)行操作。通過(guò)無(wú)修改的比較運(yùn)算符引入,且必須返回單個(gè)值。通過(guò)無(wú)修改的比較運(yùn)算符引入,且必須返回單個(gè)值。通過(guò)通過(guò) exists 引入的存在測(cè)試。引入的存在測(cè)試。n通常采用以下格式中的一種:通常采用以下格式中的一種: where 表達(dá)式表達(dá)式 not in (子查詢子查詢)where 表達(dá)式表達(dá)式 比較運(yùn)算符比較運(yùn)算符 any | all (子查詢子查詢)where not exists

17、(子查詢子查詢)華北科技學(xué)院 李文武172021年11月10日星期三n子查詢受以下條件的限制:子查詢受以下條件的限制: 通過(guò)比較運(yùn)算符引入的子查詢的選擇列表只能包括一個(gè)表達(dá)式或列名稱通過(guò)比較運(yùn)算符引入的子查詢的選擇列表只能包括一個(gè)表達(dá)式或列名稱(分別對(duì)(分別對(duì) select * 或列表進(jìn)行或列表進(jìn)行 exists 和和 in 操作除外)。操作除外)。如果外部查詢的如果外部查詢的 where 子句包括某個(gè)列名,則該子句必須與子查詢選子句包括某個(gè)列名,則該子句必須與子查詢選擇列表中的該列在聯(lián)接上兼容。擇列表中的該列在聯(lián)接上兼容。子查詢的選擇列表中不允許出現(xiàn)子查詢的選擇列表中不允許出現(xiàn) ntext、

18、text 和和 image 數(shù)據(jù)類型。數(shù)據(jù)類型。由于必須返回單個(gè)值,由無(wú)修改的比較運(yùn)算符(指其后未接關(guān)鍵字由于必須返回單個(gè)值,由無(wú)修改的比較運(yùn)算符(指其后未接關(guān)鍵字 any 或或 all)引入的子查詢不能包括)引入的子查詢不能包括 group by 和和 having 子句。子句。包括包括 group by 的子查詢不能使用的子查詢不能使用 distinct 關(guān)鍵字。關(guān)鍵字。不能指定不能指定 compute 和和 into 子句。子句。只有同時(shí)指定了只有同時(shí)指定了 top,才可以指定,才可以指定 order by。由子查詢創(chuàng)建的視圖不能更新。由子查詢創(chuàng)建的視圖不能更新。通過(guò)通過(guò) exists

19、引入的子查詢的選擇列表由星號(hào)引入的子查詢的選擇列表由星號(hào) (*) 組成,而不使用單個(gè)列組成,而不使用單個(gè)列名。通過(guò)名。通過(guò) exists 引入的子查詢進(jìn)行了存在測(cè)試,返回引入的子查詢進(jìn)行了存在測(cè)試,返回 true 或或 false 而非數(shù)據(jù),所以這些子查詢的規(guī)則與標(biāo)準(zhǔn)選擇列表的規(guī)則完全相同。而非數(shù)據(jù),所以這些子查詢的規(guī)則與標(biāo)準(zhǔn)選擇列表的規(guī)則完全相同。華北科技學(xué)院 李文武182021年11月10日星期三n可以在許多地方指定子查詢:可以在許多地方指定子查詢: 使用別名時(shí)使用別名時(shí)使用使用 in 或或 not in 時(shí)時(shí)在在 update、delete 和和 insert 語(yǔ)句中語(yǔ)句中使用比較運(yùn)算符

20、時(shí)使用比較運(yùn)算符時(shí)使用使用 any、some 或或 all 時(shí)時(shí)使用使用 exists 或或 not exists 時(shí)時(shí)在有表達(dá)式的地方在有表達(dá)式的地方 華北科技學(xué)院 李文武192021年11月10日星期三n通過(guò)通過(guò) in(或(或 not in)引入的子查詢結(jié)果是一列零值)引入的子查詢結(jié)果是一列零值或更多值。子查詢返回結(jié)果之后,外部查詢將利用這或更多值。子查詢返回結(jié)果之后,外部查詢將利用這些結(jié)果。些結(jié)果。 n使用聯(lián)接而不使用子查詢處理該問(wèn)題及類似問(wèn)題的一使用聯(lián)接而不使用子查詢處理該問(wèn)題及類似問(wèn)題的一個(gè)不同之處在于,聯(lián)接使您可以在結(jié)果中顯示多個(gè)表個(gè)不同之處在于,聯(lián)接使您可以在結(jié)果中顯示多個(gè)表中的

21、列。中的列。 n聯(lián)接總是可以表示為子查詢。子查詢經(jīng)常(但不總是)聯(lián)接總是可以表示為子查詢。子查詢經(jīng)常(但不總是)可以表示為聯(lián)接。這是因?yàn)槁?lián)接是對(duì)稱的:可以以任可以表示為聯(lián)接。這是因?yàn)槁?lián)接是對(duì)稱的:可以以任意順序?qū)⒈硪忭樞驅(qū)⒈?a 聯(lián)接到表聯(lián)接到表 b,而且會(huì)得到相同的答案。,而且會(huì)得到相同的答案。而對(duì)子查詢來(lái)說(shuō),情況則并非如此。而對(duì)子查詢來(lái)說(shuō),情況則并非如此。 華北科技學(xué)院 李文武202021年11月10日星期三n子查詢可以嵌套在子查詢可以嵌套在 update、delete 和和 insert 語(yǔ)句以及語(yǔ)句以及 select 語(yǔ)句中。語(yǔ)句中。 華北科技學(xué)院 李文武212021年11月10日星期

22、三n子查詢可由一個(gè)比較運(yùn)算符(子查詢可由一個(gè)比較運(yùn)算符(=、 =、, ! 或或 =)引入。)引入。n與使用與使用 in 引入的子查詢一樣,由未修改的比引入的子查詢一樣,由未修改的比較運(yùn)算符(后面不跟較運(yùn)算符(后面不跟 any 或或 all 的比較運(yùn)算的比較運(yùn)算符)引入的子查詢必須返回單個(gè)值而不是值列符)引入的子查詢必須返回單個(gè)值而不是值列表。如果這樣的子查詢返回多個(gè)值,將顯示錯(cuò)表。如果這樣的子查詢返回多個(gè)值,將顯示錯(cuò)誤信息。誤信息。n要使用由無(wú)修改的比較運(yùn)算符引入的子查詢,要使用由無(wú)修改的比較運(yùn)算符引入的子查詢,必須對(duì)數(shù)據(jù)和問(wèn)題的本質(zhì)非常熟悉,以了解該必須對(duì)數(shù)據(jù)和問(wèn)題的本質(zhì)非常熟悉,以了解該子

23、查詢實(shí)際是否只返回一個(gè)值。子查詢實(shí)際是否只返回一個(gè)值。華北科技學(xué)院 李文武222021年11月10日星期三n使用使用 exists 關(guān)鍵字引入一個(gè)子查詢時(shí),就相關(guān)鍵字引入一個(gè)子查詢時(shí),就相當(dāng)于進(jìn)行一次存在測(cè)試。外部查詢的當(dāng)于進(jìn)行一次存在測(cè)試。外部查詢的 where 子句測(cè)試子查詢返回的行是否存在。子查詢實(shí)子句測(cè)試子查詢返回的行是否存在。子查詢實(shí)際上不產(chǎn)生任何數(shù)據(jù);它只返回際上不產(chǎn)生任何數(shù)據(jù);它只返回 true 或或 false 值。值。n使用使用 exists 引入的子查詢語(yǔ)法如下:引入的子查詢語(yǔ)法如下:wherenotexists(子查詢子查詢)華北科技學(xué)院 李文武232021年11月10日

24、星期三n子查詢自身可以包括一個(gè)或多個(gè)子查詢。一個(gè)子查詢自身可以包括一個(gè)或多個(gè)子查詢。一個(gè)語(yǔ)句中可以嵌套任意數(shù)量的子查詢。語(yǔ)句中可以嵌套任意數(shù)量的子查詢。 華北科技學(xué)院 李文武242021年11月10日星期三n創(chuàng)建新表并將結(jié)果行從查詢插入新表中。創(chuàng)建新表并將結(jié)果行從查詢插入新表中。n用戶若要執(zhí)行帶用戶若要執(zhí)行帶 into 子句的子句的 select 語(yǔ)句,語(yǔ)句,必須在目的數(shù)據(jù)庫(kù)內(nèi)具有必須在目的數(shù)據(jù)庫(kù)內(nèi)具有 create table 權(quán)權(quán)限。限。select.into 不能與不能與 compute 子句子句一起使用。一起使用。華北科技學(xué)院 李文武252021年11月10日星期三nntext、tex

25、t 和和 image 數(shù)據(jù)類型在單個(gè)值中可以包含數(shù)據(jù)類型在單個(gè)值中可以包含非常大的數(shù)據(jù)量(最大可達(dá)非常大的數(shù)據(jù)量(最大可達(dá) 2 gb)。單個(gè)數(shù)據(jù)值通)。單個(gè)數(shù)據(jù)值通常比應(yīng)用程序在一個(gè)步驟中能夠檢索的大;某些值可常比應(yīng)用程序在一個(gè)步驟中能夠檢索的大;某些值可能還會(huì)大于客戶端的可用虛擬內(nèi)存。因此,在檢索這能還會(huì)大于客戶端的可用虛擬內(nèi)存。因此,在檢索這些值時(shí),通常需要一些特殊的步驟。些值時(shí),通常需要一些特殊的步驟。 n如果如果 ntext、text 和和 image 數(shù)據(jù)值不超過(guò)數(shù)據(jù)值不超過(guò) unicode 串、字符串或二進(jìn)制串的長(zhǎng)度(分別為串、字符串或二進(jìn)制串的長(zhǎng)度(分別為 4,000 個(gè)字符、個(gè)

26、字符、8,000 個(gè)字符和個(gè)字符和 8,000 個(gè)字節(jié)),就可以在個(gè)字節(jié)),就可以在 select、update 和和 insert 語(yǔ)句中引用它們,其引用方式語(yǔ)句中引用它們,其引用方式與較小的數(shù)據(jù)類型相同。與較小的數(shù)據(jù)類型相同。 華北科技學(xué)院 李文武262021年11月10日星期三n包含短值的包含短值的 ntext 列可在列可在 select 語(yǔ)句的選擇語(yǔ)句的選擇列表中引用,與列表中引用,與 nvarchar 列的引用方式相同。列的引用方式相同。n引用時(shí)必須遵守一些限制,例如不能在引用時(shí)必須遵守一些限制,例如不能在 where 子句中直接引用子句中直接引用 ntext、text 或或 ima

27、ge 列。列。n這些列可以作為返回其它數(shù)據(jù)類型(例如這些列可以作為返回其它數(shù)據(jù)類型(例如 isnull、substring 或或 patindex)的某個(gè))的某個(gè)函數(shù)的參數(shù)包含在函數(shù)的參數(shù)包含在 where 子句中,也可以包子句中,也可以包含在含在 is null、is not null 或或 like 表達(dá)式表達(dá)式中。中。 華北科技學(xué)院 李文武272021年11月10日星期三n事務(wù)是作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。事務(wù)是作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。n一個(gè)邏輯工作單元必須有四個(gè)屬性,稱為一個(gè)邏輯工作單元必須有四個(gè)屬性,稱為 acid(原子(原子性、一致性、隔離性和持久性)屬性,

28、只有這樣才能成性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個(gè)事務(wù):為一個(gè)事務(wù):原子性:事務(wù)必須是原子工作單元;對(duì)于其數(shù)據(jù)修改,要么原子性:事務(wù)必須是原子工作單元;對(duì)于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。全都執(zhí)行,要么全都不執(zhí)行。一致性:事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致?tīng)顟B(tài)。一致性:事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致?tīng)顟B(tài)。在相關(guān)數(shù)據(jù)庫(kù)中,所有規(guī)則都必須應(yīng)用于事務(wù)的修改,以保在相關(guān)數(shù)據(jù)庫(kù)中,所有規(guī)則都必須應(yīng)用于事務(wù)的修改,以保持所有數(shù)據(jù)的完整性。事務(wù)結(jié)束時(shí),所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)持所有數(shù)據(jù)的完整性。事務(wù)結(jié)束時(shí),所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如(如 b 樹(shù)索引或雙向鏈表)都必須是正確的

29、。樹(shù)索引或雙向鏈表)都必須是正確的。 華北科技學(xué)院 李文武282021年11月10日星期三隔離性:由并發(fā)事務(wù)所作的修改必須與任何其它隔離性:由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。事務(wù)查看數(shù)據(jù)時(shí)數(shù)據(jù)并發(fā)事務(wù)所作的修改隔離。事務(wù)查看數(shù)據(jù)時(shí)數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會(huì)查看中間狀態(tài)的數(shù)據(jù)。這稱為可串行性,因不會(huì)查看中間狀態(tài)的數(shù)據(jù)。這稱為可串行性,因?yàn)樗軌蛑匦卵b載起始數(shù)據(jù),并且重播一系列事為它能夠重新裝載起始數(shù)據(jù),并且重播一系列事務(wù),以

30、使數(shù)據(jù)結(jié)束時(shí)的狀態(tài)與原始事務(wù)執(zhí)行的狀務(wù),以使數(shù)據(jù)結(jié)束時(shí)的狀態(tài)與原始事務(wù)執(zhí)行的狀態(tài)相同。態(tài)相同。持久性:事務(wù)完成之后,它對(duì)于系統(tǒng)的影響是永持久性:事務(wù)完成之后,它對(duì)于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)系統(tǒng)故障也將一直保持。久性的。該修改即使出現(xiàn)系統(tǒng)故障也將一直保持。華北科技學(xué)院 李文武292021年11月10日星期三nsql server以三種事務(wù)模式運(yùn)行:以三種事務(wù)模式運(yùn)行:自動(dòng)提交事務(wù):每條單獨(dú)的語(yǔ)句都是一個(gè)事務(wù)。自動(dòng)提交事務(wù):每條單獨(dú)的語(yǔ)句都是一個(gè)事務(wù)。是是 sql server的默認(rèn)事務(wù)管理模式。的默認(rèn)事務(wù)管理模式。n每個(gè)每個(gè) t-sql 語(yǔ)句在完成時(shí),都被提交或回滾。語(yǔ)句在完成時(shí),都

31、被提交或回滾。n如果一個(gè)語(yǔ)句成功地完成,則提交該語(yǔ)句;如果遇到錯(cuò)如果一個(gè)語(yǔ)句成功地完成,則提交該語(yǔ)句;如果遇到錯(cuò)誤,則回滾該語(yǔ)句。誤,則回滾該語(yǔ)句。n自動(dòng)提交模式也是自動(dòng)提交模式也是 ado、ole db、odbc 和和 db-library 的默認(rèn)模式。的默認(rèn)模式。 華北科技學(xué)院 李文武302021年11月10日星期三顯式事務(wù):也稱為用戶定義或用戶指定的事務(wù)。顯式事務(wù):也稱為用戶定義或用戶指定的事務(wù)。每個(gè)事務(wù)均以每個(gè)事務(wù)均以 begin transaction 語(yǔ)句顯式語(yǔ)句顯式開(kāi)始,以開(kāi)始,以 commit 或或 rollback 語(yǔ)句顯式結(jié)束。語(yǔ)句顯式結(jié)束。隱性事務(wù):在前一個(gè)事務(wù)完成時(shí)新事

32、務(wù)隱式啟動(dòng),隱性事務(wù):在前一個(gè)事務(wù)完成時(shí)新事務(wù)隱式啟動(dòng),但每個(gè)事務(wù)仍以但每個(gè)事務(wù)仍以 commit 或或 rollback 語(yǔ)句顯語(yǔ)句顯式完成。式完成。華北科技學(xué)院 李文武312021年11月10日星期三n1.啟動(dòng)事務(wù)啟動(dòng)事務(wù)語(yǔ)法語(yǔ)法nbegin tran saction transaction_name | tran_name_variable with mark description 參數(shù)參數(shù)ntransaction_name:是給事務(wù)分配的名稱。必須遵循標(biāo)識(shí)符規(guī)則,但是給事務(wù)分配的名稱。必須遵循標(biāo)識(shí)符規(guī)則,但是不允許標(biāo)識(shí)符多于是不允許標(biāo)識(shí)符多于 32 個(gè)字符。僅在嵌套的個(gè)字符。僅在嵌套

33、的 begin.commit 或或 begin.rollback 語(yǔ)句的最外語(yǔ)句對(duì)上使用事務(wù)名。語(yǔ)句的最外語(yǔ)句對(duì)上使用事務(wù)名。ntran_name_variable:是用戶定義的、含有有效事務(wù)名稱的變量的是用戶定義的、含有有效事務(wù)名稱的變量的名稱。必須用名稱。必須用 char、varchar、nchar 或或 nvarchar 數(shù)據(jù)類型聲明。數(shù)據(jù)類型聲明。nwith mark description:指定在日志中標(biāo)記事務(wù)。:指定在日志中標(biāo)記事務(wù)。description 是描述該標(biāo)記的字符串。如果使用了是描述該標(biāo)記的字符串。如果使用了 with mark,則必須指定事務(wù),則必須指定事務(wù)名。名。w

34、ith mark 允許將事務(wù)日志還原到命名標(biāo)記。允許將事務(wù)日志還原到命名標(biāo)記。華北科技學(xué)院 李文武322021年11月10日星期三n語(yǔ)法語(yǔ)法commit tran saction transaction_name | tran_name_variable n參數(shù)參數(shù)transaction_name:sql server忽略該參數(shù)。忽略該參數(shù)。transaction_name 指定由前面的指定由前面的 begin transaction 指派的事務(wù)名稱。通過(guò)向程序員指明指派的事務(wù)名稱。通過(guò)向程序員指明 commit transaction 與哪些嵌套的與哪些嵌套的 begin transacti

35、on 相關(guān)相關(guān)聯(lián),聯(lián),transaction_name 可作為幫助閱讀的一種方法??勺鳛閹椭喿x的一種方法。tran_name_variable:是用戶定義的、含有有效事務(wù)名稱是用戶定義的、含有有效事務(wù)名稱的變量的名稱。必須用的變量的名稱。必須用 char、varchar、nchar 或或 nvarchar 數(shù)據(jù)類型聲明該變量。數(shù)據(jù)類型聲明該變量。華北科技學(xué)院 李文武332021年11月10日星期三n結(jié)束一個(gè)成功的隱性事務(wù)或用戶定義事務(wù)。結(jié)束一個(gè)成功的隱性事務(wù)或用戶定義事務(wù)。ncommit work標(biāo)志事務(wù)的結(jié)束。標(biāo)志事務(wù)的結(jié)束。語(yǔ)法:語(yǔ)法:commit work 與與 commit tran

36、saction 相同,但相同,但 commit transaction 接受用戶定義的事務(wù)名稱。接受用戶定義的事務(wù)名稱。 華北科技學(xué)院 李文武342021年11月10日星期三n語(yǔ)法語(yǔ)法rollback tran saction transaction_name | tran_name_variable | savepoint_name | savepoint_variable n參數(shù)參數(shù)transaction_name:是給是給 begin transaction 上的事務(wù)上的事務(wù)指派的名稱。嵌套事務(wù)時(shí),指派的名稱。嵌套事務(wù)時(shí),transaction_name 必須是來(lái)自最必須是來(lái)自最遠(yuǎn)的遠(yuǎn)的

37、 begin transaction 語(yǔ)句的名稱。語(yǔ)句的名稱。tran_name_variable:是用戶定義的、含有有效事務(wù)名稱是用戶定義的、含有有效事務(wù)名稱的變量的名稱。的變量的名稱。savepoint_name:是來(lái)自是來(lái)自 save transaction 語(yǔ)句的語(yǔ)句的 savepoint_name。savepoint_name 必須符合標(biāo)識(shí)符規(guī)則。必須符合標(biāo)識(shí)符規(guī)則。當(dāng)條件回滾只影響事務(wù)的一部分時(shí)使用當(dāng)條件回滾只影響事務(wù)的一部分時(shí)使用 savepoint_name。savepoint_variable:是用戶定義的、含有有效保存點(diǎn)名是用戶定義的、含有有效保存點(diǎn)名稱的變量的名稱。必須用

38、稱的變量的名稱。必須用 char、varchar、nchar 或或 nvarchar 數(shù)據(jù)類型聲明該變量。數(shù)據(jù)類型聲明該變量。華北科技學(xué)院 李文武352021年11月10日星期三n將顯式事務(wù)或隱性事務(wù)回滾到事務(wù)的起點(diǎn)或事將顯式事務(wù)或隱性事務(wù)回滾到事務(wù)的起點(diǎn)或事務(wù)內(nèi)的某個(gè)保存點(diǎn)。務(wù)內(nèi)的某個(gè)保存點(diǎn)。 nrollback transaction 清除自事務(wù)的清除自事務(wù)的起點(diǎn)或到某個(gè)保存點(diǎn)所做的所有數(shù)據(jù)修改。起點(diǎn)或到某個(gè)保存點(diǎn)所做的所有數(shù)據(jù)修改。rollback 還釋放由事務(wù)控制的資源。還釋放由事務(wù)控制的資源。nrollback work將用戶定義的事務(wù)回滾到事務(wù)的起點(diǎn)。將用戶定義的事務(wù)回滾到事務(wù)的起

39、點(diǎn)。語(yǔ)法:語(yǔ)法:rollback work 華北科技學(xué)院 李文武362021年11月10日星期三n語(yǔ)法語(yǔ)法save tran saction savepoint_name | savepoint_variable n參數(shù)參數(shù)savepoint_name:是指派給保存點(diǎn)的名稱。保存點(diǎn)是指派給保存點(diǎn)的名稱。保存點(diǎn)名稱必須符合標(biāo)識(shí)符規(guī)則,但只使用前名稱必須符合標(biāo)識(shí)符規(guī)則,但只使用前 32 個(gè)字符。個(gè)字符。savepoint_variable:是用戶定義的、含有有效保是用戶定義的、含有有效保存點(diǎn)名稱的變量的名稱。必須用存點(diǎn)名稱的變量的名稱。必須用 char、varchar、nchar 或或 nvarc

40、har 數(shù)據(jù)類型聲明該變量。數(shù)據(jù)類型聲明該變量。華北科技學(xué)院 李文武372021年11月10日星期三n用戶可以在事務(wù)內(nèi)設(shè)置保存點(diǎn)或標(biāo)記。保存點(diǎn)用戶可以在事務(wù)內(nèi)設(shè)置保存點(diǎn)或標(biāo)記。保存點(diǎn)定義的是:如果有條件地取消事務(wù)的一部分,定義的是:如果有條件地取消事務(wù)的一部分,事務(wù)可以返回的位置。事務(wù)可以返回的位置。 華北科技學(xué)院 李文武382021年11月10日星期三nwith mark descriptionn指定在日志中標(biāo)記事務(wù)。將數(shù)據(jù)庫(kù)還原到早期指定在日志中標(biāo)記事務(wù)。將數(shù)據(jù)庫(kù)還原到早期狀態(tài)時(shí),可使用標(biāo)記事務(wù)替代日期和時(shí)間。狀態(tài)時(shí),可使用標(biāo)記事務(wù)替代日期和時(shí)間。 description 是描述該標(biāo)記的字

41、符串。是描述該標(biāo)記的字符串。n如果使用了如果使用了 with mark,則必須指定事務(wù)名。,則必須指定事務(wù)名。with mark 允許將事務(wù)日志還原到命名標(biāo)記。允許將事務(wù)日志還原到命名標(biāo)記。n只有當(dāng)數(shù)據(jù)庫(kù)由標(biāo)記事務(wù)更新時(shí),才在事務(wù)日只有當(dāng)數(shù)據(jù)庫(kù)由標(biāo)記事務(wù)更新時(shí),才在事務(wù)日志中放置標(biāo)記。不修改數(shù)據(jù)的事務(wù)不被標(biāo)記。志中放置標(biāo)記。不修改數(shù)據(jù)的事務(wù)不被標(biāo)記。 華北科技學(xué)院 李文武392021年11月10日星期三n一些不能撤銷的操作,其對(duì)數(shù)據(jù)庫(kù)的操作是不一些不能撤銷的操作,其對(duì)數(shù)據(jù)庫(kù)的操作是不能恢復(fù)的。如創(chuàng)建、修改、刪除數(shù)據(jù)庫(kù)等。能恢復(fù)的。如創(chuàng)建、修改、刪除數(shù)據(jù)庫(kù)等。np168華北科技學(xué)院 李文武402

42、021年11月10日星期三n編譯錯(cuò)誤將阻止編譯錯(cuò)誤將阻止 sql server 建立執(zhí)行計(jì)劃,建立執(zhí)行計(jì)劃,這樣批處理中的任何語(yǔ)句都不會(huì)執(zhí)行。這樣批處理中的任何語(yǔ)句都不會(huì)執(zhí)行。 n運(yùn)行錯(cuò)誤時(shí),該語(yǔ)句之前的結(jié)果被保留下來(lái)。運(yùn)行錯(cuò)誤時(shí),該語(yǔ)句之前的結(jié)果被保留下來(lái)。nsql server 使用延遲的名稱解析,其中對(duì)象使用延遲的名稱解析,其中對(duì)象名直到執(zhí)行時(shí)才被解析。名直到執(zhí)行時(shí)才被解析。 所以錯(cuò)誤的對(duì)象名所以錯(cuò)誤的對(duì)象名不會(huì)在編譯時(shí)指出。不會(huì)在編譯時(shí)指出。 華北科技學(xué)院 李文武412021年11月10日星期三n在為連接將隱性事務(wù)模式設(shè)置為打開(kāi)之后,當(dāng)在為連接將隱性事務(wù)模式設(shè)置為打開(kāi)之后,當(dāng) sql

43、server 首次執(zhí)行下列任何語(yǔ)句時(shí),都會(huì)自動(dòng)啟動(dòng)一首次執(zhí)行下列任何語(yǔ)句時(shí),都會(huì)自動(dòng)啟動(dòng)一個(gè)事務(wù):個(gè)事務(wù):n在在 commit 或或 rollback 語(yǔ)句之前,該事務(wù)將一語(yǔ)句之前,該事務(wù)將一直保持有效。在第一個(gè)事務(wù)被提交或回滾之后,下次直保持有效。在第一個(gè)事務(wù)被提交或回滾之后,下次當(dāng)連接執(zhí)行這些語(yǔ)句中的任何語(yǔ)句時(shí),當(dāng)連接執(zhí)行這些語(yǔ)句中的任何語(yǔ)句時(shí),sql server 都將自動(dòng)啟動(dòng)一個(gè)新事務(wù)。都將自動(dòng)啟動(dòng)一個(gè)新事務(wù)。sql server 將不斷地生將不斷地生成一個(gè)隱性事務(wù)鏈,直到隱性事務(wù)模式關(guān)閉為止。成一個(gè)隱性事務(wù)鏈,直到隱性事務(wù)模式關(guān)閉為止。alter tableinsertcreateo

44、pendeleterevokedropselectfetchtruncate tablegrantupdate華北科技學(xué)院 李文武422021年11月10日星期三nset implicit_transactions on 語(yǔ)句啟語(yǔ)句啟動(dòng)隱性事務(wù)模式。動(dòng)隱性事務(wù)模式。n set implicit_transactions off 語(yǔ)句語(yǔ)句關(guān)閉隱性事務(wù)模式。關(guān)閉隱性事務(wù)模式。n使用使用 commit transaction、commit work、rollback transaction 或或 rollback work 語(yǔ)句結(jié)束每個(gè)事務(wù)。語(yǔ)句結(jié)束每個(gè)事務(wù)。 華北科技學(xué)院 李文武432021年11

45、月10日星期三n如果連接已經(jīng)在打開(kāi)的事務(wù)中,則上述語(yǔ)句不啟動(dòng)新如果連接已經(jīng)在打開(kāi)的事務(wù)中,則上述語(yǔ)句不啟動(dòng)新事務(wù)。事務(wù)。n對(duì)于因?yàn)樵撛O(shè)置為對(duì)于因?yàn)樵撛O(shè)置為 on 而自動(dòng)打開(kāi)的事務(wù),用戶必而自動(dòng)打開(kāi)的事務(wù),用戶必須在該事務(wù)結(jié)束時(shí)將其顯式提交或回滾。否則當(dāng)用戶須在該事務(wù)結(jié)束時(shí)將其顯式提交或回滾。否則當(dāng)用戶斷開(kāi)連接時(shí),事務(wù)及其所包含的所有數(shù)據(jù)更改將回滾。斷開(kāi)連接時(shí),事務(wù)及其所包含的所有數(shù)據(jù)更改將回滾。在事務(wù)提交后,執(zhí)行上述任一語(yǔ)句即可啟動(dòng)新事務(wù)。在事務(wù)提交后,執(zhí)行上述任一語(yǔ)句即可啟動(dòng)新事務(wù)。n隱性事務(wù)模式將保持有效,直到連接執(zhí)行隱性事務(wù)模式將保持有效,直到連接執(zhí)行 set implicit_tran

46、sactions off 語(yǔ)句使連接返回語(yǔ)句使連接返回到自動(dòng)提交模式。在自動(dòng)提交模式下,如果各個(gè)語(yǔ)句到自動(dòng)提交模式。在自動(dòng)提交模式下,如果各個(gè)語(yǔ)句成功完成則提交。成功完成則提交。華北科技學(xué)院 李文武442021年11月10日星期三n通過(guò)鎖定確保事務(wù)完整性和數(shù)據(jù)庫(kù)的一致性。通過(guò)鎖定確保事務(wù)完整性和數(shù)據(jù)庫(kù)的一致性。n如:如:讀取正由其他用戶更改的數(shù)據(jù)讀取正由其他用戶更改的數(shù)據(jù)多個(gè)用戶同時(shí)更改同一數(shù)據(jù)多個(gè)用戶同時(shí)更改同一數(shù)據(jù)華北科技學(xué)院 李文武452021年11月10日星期三n如果沒(méi)有鎖定且多個(gè)用戶同時(shí)訪問(wèn)一個(gè)數(shù)據(jù)庫(kù),如果沒(méi)有鎖定且多個(gè)用戶同時(shí)訪問(wèn)一個(gè)數(shù)據(jù)庫(kù),則當(dāng)他們的事務(wù)同時(shí)使用相同的數(shù)據(jù)時(shí)可能會(huì)

47、則當(dāng)他們的事務(wù)同時(shí)使用相同的數(shù)據(jù)時(shí)可能會(huì)發(fā)生問(wèn)題。并發(fā)問(wèn)題包括:發(fā)生問(wèn)題。并發(fā)問(wèn)題包括: 丟失或覆蓋更新。丟失或覆蓋更新。未確認(rèn)的相關(guān)性(未確認(rèn)的相關(guān)性(臟讀臟讀)。)。不一致的分析(不一致的分析(非重復(fù)讀非重復(fù)讀)。)?;孟褡x?;孟褡x。華北科技學(xué)院 李文武462021年11月10日星期三n當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初選定的值更新該行時(shí),會(huì)發(fā)生丟失更新問(wèn)題。選定的值更新該行時(shí),會(huì)發(fā)生丟失更新問(wèn)題。每個(gè)事務(wù)都不知道其它事務(wù)的存在。每個(gè)事務(wù)都不知道其它事務(wù)的存在。n最后的更新將重寫由其它事務(wù)所做的更新,這最后的更新將重寫由其它事務(wù)所做的更新,這將

48、導(dǎo)致數(shù)據(jù)丟失。將導(dǎo)致數(shù)據(jù)丟失。 華北科技學(xué)院 李文武472021年11月10日星期三n當(dāng)?shù)诙€(gè)事務(wù)選擇其它事務(wù)正在更新的行時(shí),當(dāng)?shù)诙€(gè)事務(wù)選擇其它事務(wù)正在更新的行時(shí),會(huì)發(fā)生未確認(rèn)的相關(guān)性問(wèn)題。會(huì)發(fā)生未確認(rèn)的相關(guān)性問(wèn)題。n第二個(gè)事務(wù)正在讀取的數(shù)據(jù)還沒(méi)有確認(rèn)并且可第二個(gè)事務(wù)正在讀取的數(shù)據(jù)還沒(méi)有確認(rèn)并且可能由更新此行的事務(wù)所更改。能由更新此行的事務(wù)所更改。華北科技學(xué)院 李文武482021年11月10日星期三n當(dāng)?shù)诙€(gè)事務(wù)多次訪問(wèn)同一行而且每次讀取不當(dāng)?shù)诙€(gè)事務(wù)多次訪問(wèn)同一行而且每次讀取不同的數(shù)據(jù)時(shí),會(huì)發(fā)生不一致的分析問(wèn)題。同的數(shù)據(jù)時(shí),會(huì)發(fā)生不一致的分析問(wèn)題。n不一致的分析與未確認(rèn)的相關(guān)性類似,因?yàn)槠?/p>

49、不一致的分析與未確認(rèn)的相關(guān)性類似,因?yàn)槠渌聞?wù)也是正在更改第二個(gè)事務(wù)正在讀取的數(shù)它事務(wù)也是正在更改第二個(gè)事務(wù)正在讀取的數(shù)據(jù)。然而,在不一致的分析中,第二個(gè)事務(wù)讀據(jù)。然而,在不一致的分析中,第二個(gè)事務(wù)讀取的數(shù)據(jù)是由已進(jìn)行了更改的事務(wù)提交的。取的數(shù)據(jù)是由已進(jìn)行了更改的事務(wù)提交的。n而且,不一致的分析涉及多次(兩次或更多)而且,不一致的分析涉及多次(兩次或更多)讀取同一行,而且每次信息都由其它事務(wù)更改;讀取同一行,而且每次信息都由其它事務(wù)更改;因而該行被非重復(fù)讀取。因而該行被非重復(fù)讀取。 華北科技學(xué)院 李文武492021年11月10日星期三n當(dāng)對(duì)某行執(zhí)行插入或刪除操作,而該行屬于某當(dāng)對(duì)某行執(zhí)行插入或

50、刪除操作,而該行屬于某個(gè)事務(wù)正在讀取的行的范圍時(shí),會(huì)發(fā)生幻像讀個(gè)事務(wù)正在讀取的行的范圍時(shí),會(huì)發(fā)生幻像讀問(wèn)題。問(wèn)題。n事務(wù)第一次讀的行范圍顯示出其中一行已不復(fù)事務(wù)第一次讀的行范圍顯示出其中一行已不復(fù)存在于第二次讀或后續(xù)讀中,因?yàn)樵撔幸驯黄浯嬖谟诘诙巫x或后續(xù)讀中,因?yàn)樵撔幸驯黄渌聞?wù)刪除。它事務(wù)刪除。n同樣,由于其它事務(wù)的插入操作,事務(wù)的第二同樣,由于其它事務(wù)的插入操作,事務(wù)的第二次或后續(xù)讀顯示有一行已不存在于原始讀中。次或后續(xù)讀顯示有一行已不存在于原始讀中。 華北科技學(xué)院 李文武502021年11月10日星期三nsql server 2000 提供了樂(lè)觀并發(fā)控制和悲觀提供了樂(lè)觀并發(fā)控制和悲觀并

51、發(fā)控制。樂(lè)觀并發(fā)控制使用游標(biāo)。并發(fā)控制。樂(lè)觀并發(fā)控制使用游標(biāo)。sql server 默認(rèn)使用悲觀并發(fā)控制。默認(rèn)使用悲觀并發(fā)控制。 樂(lè)觀并發(fā):樂(lè)觀并發(fā)控制假定不太可能(但不是樂(lè)觀并發(fā):樂(lè)觀并發(fā)控制假定不太可能(但不是不可能)在多個(gè)用戶間發(fā)生資源沖突,允許不鎖不可能)在多個(gè)用戶間發(fā)生資源沖突,允許不鎖定任何資源而執(zhí)行事務(wù)。只有試圖更改數(shù)據(jù)時(shí)才定任何資源而執(zhí)行事務(wù)。只有試圖更改數(shù)據(jù)時(shí)才檢查資源以確定是否發(fā)生沖突。如果發(fā)生沖突,檢查資源以確定是否發(fā)生沖突。如果發(fā)生沖突,應(yīng)用程序必須讀取數(shù)據(jù)并再次嘗試進(jìn)行更改。應(yīng)用程序必須讀取數(shù)據(jù)并再次嘗試進(jìn)行更改。 悲觀并發(fā):悲觀并發(fā)控制根據(jù)需要在事務(wù)的持續(xù)悲觀并發(fā):

52、悲觀并發(fā)控制根據(jù)需要在事務(wù)的持續(xù)時(shí)間內(nèi)鎖定資源。除非出現(xiàn)死鎖,否則事務(wù)肯定時(shí)間內(nèi)鎖定資源。除非出現(xiàn)死鎖,否則事務(wù)肯定會(huì)成功完成。會(huì)成功完成。華北科技學(xué)院 李文武512021年11月10日星期三n當(dāng)鎖定用作并發(fā)控制機(jī)制時(shí),它可以解決并發(fā)問(wèn)題。當(dāng)鎖定用作并發(fā)控制機(jī)制時(shí),它可以解決并發(fā)問(wèn)題。這使所有事務(wù)得以在彼此完全隔離的環(huán)境中運(yùn)行,但這使所有事務(wù)得以在彼此完全隔離的環(huán)境中運(yùn)行,但是任何時(shí)候都可以有多個(gè)正在運(yùn)行的事務(wù)。是任何時(shí)候都可以有多個(gè)正在運(yùn)行的事務(wù)。 n盡管可串行性對(duì)于事務(wù)確保數(shù)據(jù)庫(kù)中的數(shù)據(jù)在所有時(shí)盡管可串行性對(duì)于事務(wù)確保數(shù)據(jù)庫(kù)中的數(shù)據(jù)在所有時(shí)間內(nèi)的正確性相當(dāng)重要,然而許多事務(wù)并不總是要求間內(nèi)

53、的正確性相當(dāng)重要,然而許多事務(wù)并不總是要求完全的隔離。完全的隔離。 n事務(wù)準(zhǔn)備接受不一致數(shù)據(jù)的級(jí)別稱為隔離級(jí)別。隔離事務(wù)準(zhǔn)備接受不一致數(shù)據(jù)的級(jí)別稱為隔離級(jí)別。隔離級(jí)別是一個(gè)事務(wù)必須與其它事務(wù)進(jìn)行隔離的程度。較級(jí)別是一個(gè)事務(wù)必須與其它事務(wù)進(jìn)行隔離的程度。較低的隔離級(jí)別可以增加并發(fā),但代價(jià)是降低數(shù)據(jù)的正低的隔離級(jí)別可以增加并發(fā),但代價(jià)是降低數(shù)據(jù)的正確性。相反,較高的隔離級(jí)別可以確保數(shù)據(jù)的正確性,確性。相反,較高的隔離級(jí)別可以確保數(shù)據(jù)的正確性,但可能對(duì)并發(fā)產(chǎn)生負(fù)面影響。應(yīng)用程序要求的隔離級(jí)但可能對(duì)并發(fā)產(chǎn)生負(fù)面影響。應(yīng)用程序要求的隔離級(jí)別確定了別確定了 sql server 使用的鎖定行為。使用的鎖定

54、行為。 華北科技學(xué)院 李文武522021年11月10日星期三nsql server 支持所有這些隔離級(jí)別:支持所有這些隔離級(jí)別: 未提交讀(事務(wù)隔離的最低級(jí)別,僅可保證不讀取物理?yè)p未提交讀(事務(wù)隔離的最低級(jí)別,僅可保證不讀取物理?yè)p壞的數(shù)據(jù))。壞的數(shù)據(jù))。提交讀(提交讀(sql server 默認(rèn)級(jí)別)。不允許臟讀。默認(rèn)級(jí)別)。不允許臟讀??芍貜?fù)讀。允許幻像讀??芍貜?fù)讀。允許幻像讀??纱凶x(事務(wù)隔離的最高級(jí)別,事務(wù)之間完全隔離)。可串行讀(事務(wù)隔離的最高級(jí)別,事務(wù)之間完全隔離)。 n事務(wù)必須運(yùn)行于可重復(fù)讀或更高的隔離級(jí)別以防止丟事務(wù)必須運(yùn)行于可重復(fù)讀或更高的隔離級(jí)別以防止丟失更新。失更新。n當(dāng)

55、兩個(gè)事務(wù)檢索相同的行,然后基于原檢索的值對(duì)行當(dāng)兩個(gè)事務(wù)檢索相同的行,然后基于原檢索的值對(duì)行進(jìn)行更新時(shí),會(huì)發(fā)生丟失更新。進(jìn)行更新時(shí),會(huì)發(fā)生丟失更新。n如果兩個(gè)事務(wù)使用一個(gè)如果兩個(gè)事務(wù)使用一個(gè) update 語(yǔ)句更新行,并且語(yǔ)句更新行,并且不基于以前檢索的值進(jìn)行更新,則在默認(rèn)的提交讀隔不基于以前檢索的值進(jìn)行更新,則在默認(rèn)的提交讀隔離級(jí)別不會(huì)發(fā)生丟失更新。離級(jí)別不會(huì)發(fā)生丟失更新。華北科技學(xué)院 李文武532021年11月10日星期三nsql server 可以鎖定以下資源(按粒度增加的順序可以鎖定以下資源(按粒度增加的順序列出)。列出)。資源資源描述描述ridrid行標(biāo)識(shí)符。用于單獨(dú)鎖定表中的一行。行

56、標(biāo)識(shí)符。用于單獨(dú)鎖定表中的一行。鍵鍵(key)(key)索引中的行鎖。用于保護(hù)可串行事務(wù)中的鍵范圍。索引中的行鎖。用于保護(hù)可串行事務(wù)中的鍵范圍。頁(yè)頁(yè)(pag)(pag)8 8 千字節(jié)千字節(jié) (kb) (kb) 的數(shù)據(jù)頁(yè)或索引頁(yè)。的數(shù)據(jù)頁(yè)或索引頁(yè)。擴(kuò)展盤區(qū)擴(kuò)展盤區(qū)(ext)(ext)相鄰的八個(gè)數(shù)據(jù)頁(yè)或索引頁(yè)構(gòu)成的一組。相鄰的八個(gè)數(shù)據(jù)頁(yè)或索引頁(yè)構(gòu)成的一組。表表(tab)(tab)包括所有數(shù)據(jù)和索引在內(nèi)的整個(gè)表。包括所有數(shù)據(jù)和索引在內(nèi)的整個(gè)表。dbdb數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)。華北科技學(xué)院 李文武542021年11月10日星期三sql server 使用不同的鎖模式鎖定資源,這些鎖模式確定使用不同的鎖模式鎖定

57、資源,這些鎖模式確定了并發(fā)事務(wù)訪問(wèn)資源的方式。了并發(fā)事務(wù)訪問(wèn)資源的方式。鎖模式鎖模式描述描述共享共享 (s)(s)用于不更改或不更新數(shù)據(jù)的操作(只讀操作),如用于不更改或不更新數(shù)據(jù)的操作(只讀操作),如 select select 語(yǔ)句。語(yǔ)句。更新更新 (u)(u)用于可更新的資源中。防止當(dāng)多個(gè)會(huì)話在讀取、鎖定以及隨用于可更新的資源中。防止當(dāng)多個(gè)會(huì)話在讀取、鎖定以及隨后可能進(jìn)行的資源更新時(shí)發(fā)生常見(jiàn)形式的死鎖。后可能進(jìn)行的資源更新時(shí)發(fā)生常見(jiàn)形式的死鎖。排它排它 (x)(x)用于數(shù)據(jù)修改操作,例如用于數(shù)據(jù)修改操作,例如 insertinsert、update update 或或 deletedel

58、ete。確。確保不會(huì)同時(shí)對(duì)同一資源進(jìn)行多重更新。保不會(huì)同時(shí)對(duì)同一資源進(jìn)行多重更新。意向意向用于建立鎖的層次結(jié)構(gòu)。意向鎖的類型為:意向共享用于建立鎖的層次結(jié)構(gòu)。意向鎖的類型為:意向共享 (is)(is)、意向排它意向排它 (ix) (ix) 以及與意向排它共享以及與意向排它共享 (six)(six)。架構(gòu)架構(gòu)在執(zhí)行依賴于表架構(gòu)的操作時(shí)使用。架構(gòu)鎖的類型為:架構(gòu)在執(zhí)行依賴于表架構(gòu)的操作時(shí)使用。架構(gòu)鎖的類型為:架構(gòu)修改修改 (sch(sch-m) -m) 和架構(gòu)穩(wěn)定性和架構(gòu)穩(wěn)定性 (sch(sch-s)-s)。大容量更新大容量更新 (bu)(bu)向表中大容量復(fù)制數(shù)據(jù)并指定了向表中大容量復(fù)制數(shù)據(jù)并指

59、定了 tablock tablock 提示時(shí)使用。提示時(shí)使用。華北科技學(xué)院 李文武552021年11月10日星期三n共享共享 (s) 鎖允許并發(fā)事務(wù)讀取鎖允許并發(fā)事務(wù)讀取 (select) 一個(gè)一個(gè)資源。資源上存在共享資源。資源上存在共享 (s) 鎖時(shí),任何其它事鎖時(shí),任何其它事務(wù)都不能修改數(shù)據(jù)。務(wù)都不能修改數(shù)據(jù)。n一旦已經(jīng)讀取數(shù)據(jù),便立即釋放資源上的共享一旦已經(jīng)讀取數(shù)據(jù),便立即釋放資源上的共享 (s) 鎖,除非將事務(wù)隔離級(jí)別設(shè)置為可重復(fù)讀鎖,除非將事務(wù)隔離級(jí)別設(shè)置為可重復(fù)讀或更高級(jí)別,或者在事務(wù)生存周期內(nèi)用鎖定提或更高級(jí)別,或者在事務(wù)生存周期內(nèi)用鎖定提示保留共享示保留共享 (s) 鎖。鎖。華

60、北科技學(xué)院 李文武562021年11月10日星期三n更新更新 (u) 鎖可以防止通常形式的死鎖。一般更新模式由一個(gè)事務(wù)鎖可以防止通常形式的死鎖。一般更新模式由一個(gè)事務(wù)組成,此事務(wù)讀取記錄,獲取資源(頁(yè)或行)的共享組成,此事務(wù)讀取記錄,獲取資源(頁(yè)或行)的共享 (s) 鎖,然鎖,然后修改行,此操作要求鎖轉(zhuǎn)換為排它后修改行,此操作要求鎖轉(zhuǎn)換為排它 (x) 鎖。鎖。n如果兩個(gè)事務(wù)獲得了資源上的共享模式鎖,然后試圖同時(shí)更新數(shù)如果兩個(gè)事務(wù)獲得了資源上的共享模式鎖,然后試圖同時(shí)更新數(shù)據(jù),則一個(gè)事務(wù)嘗試將鎖轉(zhuǎn)換為排它據(jù),則一個(gè)事務(wù)嘗試將鎖轉(zhuǎn)換為排它 (x) 鎖。鎖。n共享模式到排它鎖的轉(zhuǎn)換必須等待一段時(shí)間,

溫馨提示

  • 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)論