數(shù)據(jù)庫面試基礎(chǔ)知識總結(jié)_第1頁
數(shù)據(jù)庫面試基礎(chǔ)知識總結(jié)_第2頁
數(shù)據(jù)庫面試基礎(chǔ)知識總結(jié)_第3頁
數(shù)據(jù)庫面試基礎(chǔ)知識總結(jié)_第4頁
數(shù)據(jù)庫面試基礎(chǔ)知識總結(jié)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1。 數(shù)據(jù)抽象:物理抽象、概念抽象、視圖級抽象,內(nèi)模式、模式、外模式提示:(1)。 概念模式:(面向單個用戶的)是數(shù)據(jù)中全部數(shù)據(jù)的整體邏輯結(jié)構(gòu)的描述.它由若干個概念記錄類型組成。(2)。 外模式:(面向全局的)是用戶與數(shù)據(jù)庫系統(tǒng)的接口,是用戶用到的那部分?jǐn)?shù)據(jù)的描述。它由若干個外部記錄類型組成。(3)。 內(nèi)模式:(面向存儲的)是數(shù)據(jù)庫在物理存儲方面的描述,它定義所有的內(nèi)部記錄類型、索引、和文件的組織方式,以及數(shù)據(jù)控制方面的細(xì)節(jié)。模式描述的是數(shù)據(jù)的全局邏輯結(jié)構(gòu),外模式描述的是數(shù)據(jù)的局部邏輯結(jié)構(gòu).對應(yīng)與同一個模式可以有任意多個外模式。在數(shù)據(jù)庫中提供兩級映像功能,即外模式/模式映像和模式/內(nèi)模式映像.

2、對于沒一個外模式,數(shù)據(jù)庫系統(tǒng)都有一個外模式/模式映像它定義了該外模式與模式之間的對應(yīng)關(guān)系。這些映像定義通常包括在各自外模式的描述中,當(dāng)模式改變時,由數(shù)據(jù)庫管理員對各個外模式/模式的映像做相應(yīng)改變,可以使外模式保持不變,從而應(yīng)用程序不必修改,保證了數(shù)據(jù)的邏輯獨立性.數(shù)據(jù)庫中只有一個模式,也只有一個內(nèi)模式,所以模式/內(nèi)模式映像是唯一的,它定義了數(shù)據(jù)全局邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)之間的對應(yīng)關(guān)系.當(dāng)數(shù)據(jù)庫的存儲結(jié)構(gòu)改變了,由數(shù)據(jù)庫管理員對模式/內(nèi)模式映像做相應(yīng)改變,可以使模式保持不變,從而保證了數(shù)據(jù)的物理獨立性.2. SQL語言包括數(shù)據(jù)定義、數(shù)據(jù)操縱(Data Manipulation),數(shù)據(jù)控制(Data

3、Control)數(shù)據(jù)定義:Create Table,Alter Table,Drop Table, Craete/Drop Index等數(shù)據(jù)操縱:Select ,insert,update,delete,數(shù)據(jù)控制:grant,revoke3。 SQL常用命令CREATE TABLE Student(ID NUMBER PRIMARY KEY,NAME VARCHAR2(50) NOT NULL);/建表CREATE VIEW view_name ASSelect FROM Table_name;/建視圖Create UNIQUE INDEX index_name ON TableName(co

4、l_name);/建索引INSERT INTO tablename column1,column2, values(exp1,exp2,);/插入INSERT INTO Viewname column1,column2, values(exp1,exp2,);/插入視圖實際影響表UPDATE tablename SET name=zang 3 condition;/更新數(shù)據(jù)DELETE FROM Tablename WHERE condition;/刪除GRANT (Select,delete,) ON (對象) TO USER_NAME WITH GRANT OPTION;/授權(quán)REVOKE

5、 (權(quán)限表) ON(對象) FROM USER_NAME WITH REVOKE OPTION /撤權(quán)列出工作人員及其領(lǐng)導(dǎo)的名字:Select E。NAME, S。NAME FROM EMPLOYEE E SWHERE E。SUPERName=S。Name4。 視圖提示:計算機(jī)數(shù)據(jù)庫中的視圖是一個虛擬表,其內(nèi)容由查詢定義.同真實的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù).但是,視圖并不在數(shù)據(jù)庫中以存儲的數(shù)據(jù)值集形式存在.行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表,并且在引用視圖時動態(tài)生成。從用戶角度來看,一個視圖是從一個特定的角度來查看數(shù)據(jù)庫中的數(shù)據(jù)。從數(shù)據(jù)庫系統(tǒng)內(nèi)部來看,一個視圖是由SELE

6、CT語句組成的查詢定義的虛擬表.從數(shù)據(jù)庫系統(tǒng)內(nèi)部來看,視圖是由一張或多張表中的數(shù)據(jù)組成的,從數(shù)據(jù)庫系統(tǒng)外部來看,視圖就如同一張表一樣,對表能夠進(jìn)行的一般操作都可以應(yīng)用于視圖,例如查詢,插入,修改,刪除操作等。5。 完整性約束:實體完整性、參照完整性、用戶定義完整性提示:定義:關(guān)系完整性是為保證數(shù)據(jù)庫中數(shù)據(jù)的正確性和相容性,對關(guān)系模型提出的某種約束條件或規(guī)則.完整性通常包括域完整性,實體完整性、參照完整性和用戶定義完整性,其中域完整性,實體完整性和參照完整性,是關(guān)系模型必須滿足的完整性約束條件.(1)。 域完整性約束:域完整性是保證數(shù)據(jù)庫字段取值的合理性。屬性值應(yīng)是域中的值,這是關(guān)系模式規(guī)定了的

7、。除此之外,一個屬性能否為NULL,這是由語義決定的,也是域完整性約束的主要內(nèi)容。域完整性約束是最簡單、最基本的約束.在當(dāng)今的關(guān)系DBMS中,一般都有域完整性約束檢查功能。包括檢查(CHECK)、默認(rèn)值(DEFAULT)、不為空(NOT NULL)等。(2). 實體完整性實體完整性是指關(guān)系的主關(guān)鍵字不能重復(fù)也不能取“空值"。一個關(guān)系對應(yīng)現(xiàn)實世界中一個實體集。現(xiàn)實世界中的實體是可以相互區(qū)分、識別的,也即它們應(yīng)具有某種惟一性標(biāo)識.在關(guān)系模式中,以主關(guān)鍵字作為惟一性標(biāo)識,而主關(guān)鍵字中的屬性(稱為主屬性)不能取空值,否則,表明關(guān)系模式中存在著不可標(biāo)識的實體(因空值是“不確定”的),這與現(xiàn)實世

8、界的實際情況相矛盾,這樣的實體就不是一個完整實體.按實體完整性規(guī)則要求,主屬性不得取空值,如主關(guān)鍵字是多個屬性的組合,則所有主屬性均不得取空值。如表11將編號作為主關(guān)鍵字,那么,該列不得有空值,否則無法對應(yīng)某個具體的職工,這樣的表格不完整,對應(yīng)關(guān)系不符合實體完整性規(guī)則的約束條件。(3)。 參照完整性參照完整性是定義建立關(guān)系之間聯(lián)系的主關(guān)鍵字與外部關(guān)鍵字引用的約束條件。關(guān)系數(shù)據(jù)庫中通常都包含多個存在相互聯(lián)系的關(guān)系,關(guān)系與關(guān)系之間的聯(lián)系是通過公共屬性來實現(xiàn)的。所謂公共屬性,它是一個關(guān)系R(稱為被參照關(guān)系或目標(biāo)關(guān)系)的主關(guān)鍵字,同時又是另一關(guān)系K(稱為參照關(guān)系)的外部關(guān)鍵字.如果參照關(guān)系K中外部關(guān)鍵

9、字的取值,要么與被參照關(guān)系R中某元組主關(guān)鍵字的值相同,要么取空值,那么,在這兩個關(guān)系間建立關(guān)聯(lián)的主關(guān)鍵字和外部關(guān)鍵字引用,符合參照完整性規(guī)則要求。如果參照關(guān)系K的外部關(guān)鍵字也是其主關(guān)鍵字,根據(jù)實體完整性要求,主關(guān)鍵字不得取空值,因此,參照關(guān)系K外部關(guān)鍵字的取值實際上只能取相應(yīng)被參照關(guān)系R中已經(jīng)存在的主關(guān)鍵字值。在學(xué)生管理數(shù)據(jù)庫中,如果將選課表作為參照關(guān)系,學(xué)生表作為被參照關(guān)系,以“學(xué)號”作為兩個關(guān)系進(jìn)行關(guān)聯(lián)的屬性,則“學(xué)號"是學(xué)生關(guān)系的主關(guān)鍵字,是選課關(guān)系的外部關(guān)鍵字。選課關(guān)系通過外部關(guān)鍵字“學(xué)號'參照學(xué)生關(guān)系.(4). 用戶定義完整性實體完整性和參照完整性適用于任何關(guān)系型數(shù)

10、據(jù)庫系統(tǒng),它主要是針對關(guān)系的主關(guān)鍵字和外部關(guān)鍵字取值必須有效而做出的約束。用戶定義完整性則是根據(jù)應(yīng)用環(huán)境的要求和實際的需要,對某一具體應(yīng)用所涉及的數(shù)據(jù)提出約束性條件.這一約束機(jī)制一般不應(yīng)由應(yīng)用程序提供,而應(yīng)有由關(guān)系模型提供定義并檢驗,用戶定義完整性主要包括字段有效性約束和記錄有效性.6。 第三范式:提示:(1)。第一范式(1NF):在關(guān)系模式R中的每一個具體關(guān)系r中,如果每個屬性值都是不可再分的最小數(shù)據(jù)單位,則稱R是第一范式的關(guān)系。例:如職工號,姓名,電話號碼組成一個表(一個人可能有一個辦公室電話和一個家里電話號碼)規(guī)范成為1NF有三種方法:一是重復(fù)存儲職工號和姓名.這樣,關(guān)鍵字只能是電話號碼

11、。二是職工號為關(guān)鍵字,電話號碼分為單位電話和住宅電話兩個屬性三是職工號為關(guān)鍵字,但強制每條記錄只能有一個電話號碼.以上三個方法,第一種方法最不可取,按實際情況選取后兩種情況。(2)。第二范式(2NF):如果關(guān)系模式R(U,F(xiàn))中的所有非主屬性都完全依賴于任意一個候選關(guān)鍵字,則稱關(guān)系R 是屬于第二范式的.例:選課關(guān)系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO為學(xué)號, CNO為課程號,GRADEGE 為成績,CREDIT 為學(xué)分.由以上條件,關(guān)鍵字為組合關(guān)鍵字(SNO,CNO)在應(yīng)用中使用以上關(guān)系模式有以下問題:a.數(shù)據(jù)冗余,假設(shè)同一門課由40個學(xué)生選修,學(xué)分就重復(fù)40次。b.

12、更新異常,若調(diào)整了某課程的學(xué)分,相應(yīng)的元組CREDIT值都要更新,有可能會出現(xiàn)同一門課學(xué)分不同。c.插入異常,如計劃開新課,由于沒人選修,沒有學(xué)號關(guān)鍵字,只能等有人選修才能把課程和學(xué)分存入.d。刪除異常,若學(xué)生已經(jīng)結(jié)業(yè),從當(dāng)前數(shù)據(jù)庫刪除選修記錄。某些門課程新生尚未選修,則此門課程及學(xué)分記錄無法保存.原因:非關(guān)鍵字屬性CREDIT僅函數(shù)依賴于CNO,也就是CREDIT部分依賴組合關(guān)鍵字(SNO,CNO)而不是完全依賴。解決方法:分成兩個關(guān)系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT).新關(guān)系包括兩個關(guān)系模式,它們之間通過SC1中的外關(guān)鍵字CNO相聯(lián)系,需要時再進(jìn)行自然

13、聯(lián)接,恢復(fù)了原來的關(guān)系(3).第三范式(3NF):如果關(guān)系模式R(U,F(xiàn))中的所有非主屬性對任何候選關(guān)鍵字都不存在傳遞信賴,則稱關(guān)系R是屬于第三范式的。例:如S1(SNO,SNAME,DNO,DNAME,LOCATION)各屬性分別代表學(xué)號,姓名,所在系,系名稱,系地址。關(guān)鍵字SNO決定各個屬性。由于是單個關(guān)鍵字,沒有部分依賴的問題,肯定是2NF。但這關(guān)系肯定有大量的冗余,有關(guān)學(xué)生所在的幾個屬性DNO,DNAME,LOCATION將重復(fù)存儲,插入,刪除和修改時也將產(chǎn)生類似以上例的情況.原因:關(guān)系中存在傳遞依賴造成的.即SNO - DNO。而DNO SNO卻不存在,DNO - LOCATION,

14、因此關(guān)鍵遼 SNO 對 LOCATION 函數(shù)決定是通過傳遞依賴 SNO LOCATION 實現(xiàn)的.也就是說,SNO不直接決定非主屬性LOCATION。解決目地:每個關(guān)系模式中不能留有傳遞依賴.解決方法:分為兩個關(guān)系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)注意:關(guān)系S中不能沒有外關(guān)鍵字DNO.否則兩個關(guān)系之間失去聯(lián)系。7。 ER(實體/聯(lián)系)模型提示:實體關(guān)系模型是面向現(xiàn)實世界,而不是面向?qū)崿F(xiàn)方法的,它主要是用于描述現(xiàn)實信息世界中數(shù)據(jù)的靜態(tài)特性,而不涉及數(shù)據(jù)的處理過程。基本概念:實體:現(xiàn)實世界中任何可以相互區(qū)分的事物。解釋:實體可以是人,也可以是物;可以指

15、實際的對象,也可以指某些概念。例如,一個職工、一個學(xué)生、一門課,學(xué)生的一些選課.屬性:實體(或聯(lián)系)所具有的某方面特征(相當(dāng)于數(shù)據(jù)庫表的字段(列)。例如:學(xué)生實體,可由學(xué)號、姓名、性別、年齡、系、年級。(9673101,王平,男,22,計算機(jī)系,三年級)這些屬性組合起來就表現(xiàn)了一個學(xué)生的情況。(相當(dāng)于記錄,特性為字段).聯(lián)系:發(fā)生在實體之間具有特定含義的對應(yīng)關(guān)系PS:實體、屬性一般是名詞,聯(lián)系一般是動詞ER圖中的四個基本成分:1。矩形框,表示實體2.菱形框,表示實體之間的聯(lián)系3。橢圓形框,表示實體或聯(lián)系的屬性4。直線,連接實體、屬性、和聯(lián)系。直線端部標(biāo)注聯(lián)系的種類(1:1、1:N或M:N)連個

16、實體(或表)之間的聯(lián)系分為三類:(1). 一對一聯(lián)系(1:1)如果實體集合A中的每一個實體,實體集合B中至少都一個實體與之聯(lián)系,反之亦然,則稱為實體集合A與實體集合B具有一對一聯(lián)系,記為1:1。例如,一個班級有一個班長。(2)。 一對多聯(lián)系(1:n)如果實體集合A中的每一個實體,實體集合B中至少都n(n>=0)個實體與之聯(lián)系,反之,對于實體集合B中每一個實體,實體集合A中的至多有一個實體與之聯(lián)系,則稱為實體集合A與實體集合B具有一對多聯(lián)系,記為1:n。例如,一個班級有多個班干部。(3). 多對多聯(lián)系(m:n)如果實體集合A中的每一個實體,實體集合B中至少有n(n=0)個實體與之聯(lián)系,反之

17、,對于實體集合B中每一個實體,實體集合A中的至少有m(m>=0)個實體與之聯(lián)系,則稱為實體集合A與實體集合B具有多對多聯(lián)系,記為m:n。例如,一個學(xué)生可以選修多門課,一門課可以有多個學(xué)生選修。8。 索引的作用提示:可以利用索引快速訪問數(shù)據(jù)庫表中的特定信息.索引是對數(shù)據(jù)庫表中一個或多個列(例如,employee 表的姓氏 (lname) 列)的值進(jìn)行排序的結(jié)構(gòu)。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助于更快地獲取信息.索引提供指針以指向存儲在表中指定列的數(shù)據(jù)值,然后根據(jù)指定的排序次序排列這些指針.數(shù)據(jù)庫使用索引的方式與使用書的目錄很相似:通過搜索索引找到特定的

18、值,然后跟隨指針到達(dá)包含該值的行。在數(shù)據(jù)庫關(guān)系圖中,可以為選定的表創(chuàng)建、編輯或刪除索引/鍵屬性頁中的每個索引類型。當(dāng)保存附加在此索引上的表或包含此表的數(shù)據(jù)庫關(guān)系圖時,索引同時被保存。有關(guān)詳細(xì)信息,請參見創(chuàng)建索引。通常情況下,只有當(dāng)經(jīng)常查詢索引列中的數(shù)據(jù)時,才需要在表上創(chuàng)建索引.索引將占用磁盤空間,并且降低添加、刪除和更新行的速度.不過在多數(shù)情況下,索引所帶來的數(shù)據(jù)檢索速度的優(yōu)勢大大超過它的不足之處。然而,如果應(yīng)用程序非常頻繁地更新數(shù)據(jù),或磁盤空間有限,那么最好限制索引的數(shù)量.   在創(chuàng)建索引前,必須確定要使用的列和要創(chuàng)建的索引類型.9。 事務(wù)提示:數(shù)據(jù)庫事務(wù)(Databas

19、e Transaction),是指作為單個邏輯工作單元執(zhí)行的一系列操作.事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會永久更新面向數(shù)據(jù)的資源。通過將一組相關(guān)操作組合為一個要么全部成功要么全部失敗的單元,可以簡化錯誤恢復(fù)并使應(yīng)用程序更加可靠。一個邏輯工作單元要成為事務(wù),必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。數(shù)據(jù)庫事務(wù)的ACID特性(1)。 原子性(atomic)(atomicity) 事務(wù)必須是原子工作單元;對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。通常,與某個事務(wù)關(guān)聯(lián)的操作具有共同的目標(biāo),并且是相互依賴的。如果系統(tǒng)只執(zhí)行這些操作的一個子集,則可能會破

20、壞事務(wù)的總體目標(biāo).原子性消除了系統(tǒng)處理操作子集的可能性.(2)。 一致性(consistent)(consistency) 事務(wù)在完成時,必須使所有的數(shù)據(jù)都保持一致狀態(tài)。在相關(guān)數(shù)據(jù)庫中,所有規(guī)則都必須應(yīng)用于事務(wù)的修改,以保持所有數(shù)據(jù)的完整性。事務(wù)結(jié)束時,所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如 B 樹索引或雙向鏈表)都必須是正確的。某些維護(hù)一致性的責(zé)任由應(yīng)用程序開發(fā)人員承擔(dān),他們必須確保應(yīng)用程序已強制所有已知的完整性約束。例如,當(dāng)開發(fā)用于轉(zhuǎn)帳的應(yīng)用程序時,應(yīng)避免在轉(zhuǎn)帳過程中任意移動小數(shù)點。(3). 隔離性(insulation)(isolation) 由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。事

21、務(wù)查看數(shù)據(jù)時數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會查看中間狀態(tài)的數(shù)據(jù).這稱為可串行性,因為它能夠重新裝載起始數(shù)據(jù),并且重播一系列事務(wù),以使數(shù)據(jù)結(jié)束時的狀態(tài)與原始事務(wù)執(zhí)行的狀態(tài)相同。當(dāng)事務(wù)可序列化時將獲得最高的隔離級別.在此級別上,從一組可并行執(zhí)行的事務(wù)獲得的結(jié)果與通過連續(xù)運行每個事務(wù)所獲得的結(jié)果相同。由于高度隔離會限制可并行執(zhí)行的事務(wù)數(shù),所以一些應(yīng)用程序降低隔離級別以換取更大的吞吐量.防止數(shù)據(jù)丟失(4). 持久性(Duration)(durability)事務(wù)完成之后,它對于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持.1

22、0。 數(shù)據(jù)庫中的鎖提示:在數(shù)據(jù)庫中引入鎖的原因:多個用戶同時對數(shù)據(jù)庫的并發(fā)操作時會帶來以下數(shù)據(jù)不一致的問題: (1). 丟失更新:A,B兩個用戶讀同一數(shù)據(jù)并進(jìn)行修改,其中一個用戶的修改結(jié)果破壞了另一個修改的結(jié)果,比如訂票系統(tǒng).(2)。 臟讀:A用戶修改了數(shù)據(jù),隨后B用戶又讀出該數(shù)據(jù),但A用戶因為某些原因取消了對數(shù)據(jù)的修改,數(shù)據(jù)恢復(fù)原值,此時B得到的數(shù)據(jù)就與數(shù)據(jù)庫內(nèi)的數(shù)據(jù)產(chǎn)生了不一致.(3)。 不可重復(fù)讀:A用戶讀取數(shù)據(jù),隨后B用戶讀出該數(shù)據(jù)并修改,此時A用戶再讀取數(shù)據(jù)時發(fā)現(xiàn)前后兩次的值不一致。并發(fā)控制的主要方法是封鎖,鎖就是在一段時間內(nèi)禁止用戶做某些操作以避免產(chǎn)生數(shù)據(jù)不一致。在數(shù)據(jù)庫中主要使用

23、兩種鎖:(1)。 共享鎖共享 (S) 鎖允許并發(fā)事務(wù)讀取 (SELECT)一個資源.資源上存在共享 (S) 鎖時,任何其它事務(wù)都不能修改數(shù)據(jù)。一旦已經(jīng)讀取數(shù)據(jù),便立即釋放資源上的共享 (S) 鎖,除非將事務(wù)隔離級別設(shè)置為可重復(fù)讀或更高級別,或者在事務(wù)生存周期內(nèi)用鎖定提示保留共享 (S) 鎖。(2). 排它鎖排它 (X) 鎖可以防止并發(fā)事務(wù)對資源進(jìn)行訪問。其它事務(wù)不能讀取或修改排它 (X) 鎖鎖定的數(shù)據(jù)。鎖的粒度鎖粒度是被封鎖目標(biāo)的大小,封鎖粒度小則并發(fā)性高,但開銷大,封鎖粒度大則并發(fā)性低但開銷小。兩段鎖協(xié)議所謂兩段鎖協(xié)議是指所有事務(wù)必須分兩個階段對數(shù)據(jù)項加鎖和解鎖:1. 在對任何數(shù)據(jù)進(jìn)行讀、寫

24、操作之前,首先要申請并獲得對該數(shù)據(jù)的封鎖,而且2。 在釋放一個封鎖之后,事務(wù)不再申請和獲得任何其他封鎖。所謂“兩段"鎖的含義是,事務(wù)分為兩個階段,第一階段是獲得封鎖,也稱為擴(kuò)展階段。在這階段,事務(wù)可以申請獲得任何數(shù)據(jù)項上的任何類型的鎖,但是不能釋放任何鎖。第二階段是釋放封鎖,也稱為收縮階段。在這階段,事務(wù)可以釋放任何數(shù)據(jù)項上的任何類型的鎖,但是不能再申請任何鎖.例如事務(wù)T1遵守兩段鎖協(xié)議,其封鎖序列是:(如右) 又如事務(wù)T2不遵守兩段鎖協(xié)議,其封鎖序列是:Slock A Unlock A Slock B Xlock C Unlock C Unlock B;可以證明,若并發(fā)執(zhí)行的所有事

25、務(wù)均遵守兩段鎖協(xié)議,則對這些事務(wù)的任何并發(fā)調(diào)度策略都是可串行化的。另外要注意兩段鎖協(xié)議和防止死鎖的一次封鎖法的異同之處。一次封鎖法要求每個事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行,因此一次封鎖法遵守兩段鎖協(xié)議;但是兩段鎖協(xié)議并不要求事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,因此遵守兩段鎖協(xié)議的事務(wù)可能發(fā)生死鎖。11. 死鎖及處理提示:所謂死鎖:是指兩個或兩個以上的進(jìn)程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進(jìn)下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程.由于資源占用是互斥的,當(dāng)某個進(jìn)程提出申請資源后,

26、使得有關(guān)進(jìn)程在無外力協(xié)助下,永遠(yuǎn)分配不到必需的資源而無法繼續(xù)運行,這就產(chǎn)生了一種特殊現(xiàn)象死鎖。產(chǎn)生死鎖的原因1. 競爭資源引起進(jìn)程死鎖當(dāng)系統(tǒng)中供多個進(jìn)程共享的資源如打印機(jī)、公用隊列的等,其數(shù)目不足以滿足諸進(jìn)程的需要時,會引起諸進(jìn)程對資源的競爭而產(chǎn)生死鎖。(1)。 可剝奪資源和不可剝奪資源系統(tǒng)中的資源可以分為兩類,一類是可剝奪資源,是指某進(jìn)程在獲得這類資源后,該資源可以再被其他進(jìn)程或系統(tǒng)剝奪.例如,優(yōu)先權(quán)高的進(jìn)程可以剝奪優(yōu)先權(quán)低的進(jìn)程的處理機(jī)。又如,內(nèi)存區(qū)可由存儲器管理程序,把一個進(jìn)程從一個存儲區(qū)移到另一個存儲區(qū),此即剝奪了該進(jìn)程原來占有的存儲區(qū),甚至可將一進(jìn)程從內(nèi)存調(diào)到外存上,可見,CPU和主

27、存均屬于可剝奪性資源。另一類資源是不可剝奪資源,當(dāng)系統(tǒng)把這類資源分配給某進(jìn)程后,再不能強行收回,只能在進(jìn)程用完后自行釋放,如磁帶機(jī)、打印機(jī)等.(2)。 競爭不可剝奪資源在系統(tǒng)中所配置的不可剝奪資源,由于它們的數(shù)量不能滿足諸進(jìn)程運行的需要,會使進(jìn)程在運行過程中,因爭奪這些資源而陷于僵局。例如,系統(tǒng)中只有一臺打印機(jī)R1和一臺磁帶機(jī)R2,可供進(jìn)程P1和P2共享。假定PI已占用了打印機(jī)R1,P2已占用了磁帶機(jī)R2,若P2繼續(xù)要求打印機(jī)R1,P2將阻塞;P1若又要求磁帶機(jī),P1也將阻塞.于是,在P1和P2之間就形成了僵局,兩個進(jìn)程都在等待對方釋放自己所需要的資源,但是它們又都因不能繼續(xù)獲得自己所需要的資

28、源而不能繼續(xù)推進(jìn),從而也不能釋放自己所占有的資源,以致進(jìn)入死鎖狀態(tài).(3)。 競爭臨時資源上面所說的打印機(jī)資源屬于可順序重復(fù)使用型資源,稱為永久資源.還有一種所謂的臨時資源,這是指由一個進(jìn)程產(chǎn)生,被另一個進(jìn)程使用,短時間后便無用的資源,故也稱為消耗性資源,如硬件中斷、信號、消息、緩沖區(qū)內(nèi)的消息等,它也可能引起死鎖。例如,SI,S2,S3是臨時性資源,進(jìn)程P1產(chǎn)生消息S1,又要求從P3接收消息S3;進(jìn)程P3產(chǎn)生消息S3,又要求從進(jìn)程P2處接收消息S2;進(jìn)程P2產(chǎn)生消息S2,又要求從P1處接收產(chǎn)生的消息S1.如果消息通信按如下順序進(jìn)行:P1: ···Relese(S1

29、);Request(S3); ··· P2: ···Relese(S2);Request(S1); ··· P3: ···Relese(S3);Request(S2); ··· 并不可能發(fā)生死鎖.但若改成下述的運行順序:P1: ···Request(S3);Relese(S1);··· P2: ···Request(S1);Relese(S2); ·

30、;·· P3: ···Request(S2);Relese(S3); ··· 則可能發(fā)生死鎖.2.進(jìn)程推進(jìn)順序不當(dāng)引起死鎖由于進(jìn)程在運行中具有異步性特征,這可能使P1和P2兩個進(jìn)程按下述兩種順序向前推進(jìn)。(1)進(jìn)程推進(jìn)順序合法當(dāng)進(jìn)程P1和P2并發(fā)執(zhí)行時,如果按照下述順序推進(jìn):P1:Request(R1); P1:Request(R2); P1: Relese(R1);P1: Relese(R2); P2:Request(R2); P2:Request(R1); P2: Relese(R2);P2: Relese(R

31、1);這兩個進(jìn)程便可順利完成,這種不會引起進(jìn)程死鎖的推進(jìn)順序是合法的。(2)進(jìn)程推進(jìn)順序非法若P1保持了資源R1,P2保持了資源R2,系統(tǒng)處于不安全狀態(tài),因為這兩個進(jìn)程再向前推進(jìn),便可能發(fā)生死鎖。例如,當(dāng)P1運行到P1:Request(R2)時,將因R2已被P2占用而阻塞;當(dāng)P2運行到P2:Request(R1)時,也將因R1已被P1占用而阻塞,于是發(fā)生進(jìn)程死鎖。編輯本段產(chǎn)生死鎖的必要條件雖然進(jìn)程在運行過程中,可能發(fā)生死鎖,但死鎖的發(fā)生也必須具備一定的條件,死鎖的發(fā)生必須具備以下四個必要條件:(1)互斥條件:指進(jìn)程對所分配到的資源進(jìn)行排它性使用,即在一段時間內(nèi)某資源只由一個進(jìn)程占用.如果此時還

32、有其它進(jìn)程請求資源,則請求者只能等待,直至占有資源的進(jìn)程用畢釋放。(2)請求和保持條件:指進(jìn)程已經(jīng)保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進(jìn)程占有,此時請求進(jìn)程阻塞,但又對自己已獲得的其它資源保持不放.(3)不剝奪條件:指進(jìn)程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。(4)環(huán)路等待條件:指在發(fā)生死鎖時,必然存在一個進(jìn)程-資源的環(huán)形鏈,即進(jìn)程集合P0,P1,P2,···,Pn中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,,Pn正在等待已被P0占用的資源。處理死鎖的基本方法在系統(tǒng)中已經(jīng)出現(xiàn)死鎖后,應(yīng)該及時檢

33、測到死鎖的發(fā)生,并采取適當(dāng)?shù)拇胧﹣斫獬梨i。目前處理死鎖的方法可歸結(jié)為以下四種:(1) 預(yù)防死鎖。這是一種較簡單和直觀的事先預(yù)防的方法.方法是通過設(shè)置某些限制條件,去破壞產(chǎn)生死鎖的四個必要條件中的一個或者幾個,來預(yù)防發(fā)生死鎖。預(yù)防死鎖是一種較易實現(xiàn)的方法,已被廣泛使用。但是由于所施加的限制條件往往太嚴(yán)格,可能會導(dǎo)致系統(tǒng)資源利用率和系統(tǒng)吞吐量降低.(2) 避免死鎖。該方法同樣是屬于事先預(yù)防的策略,但它并不須事先采取各種限制措施去破壞產(chǎn)生死鎖的的四個必要條件,而是在資源的動態(tài)分配過程中,用某種方法去防止系統(tǒng)進(jìn)入不安全狀態(tài),從而避免發(fā)生死鎖.(3)檢測死鎖.這種方法并不須事先采取任何限制性措施,也不

34、必檢查系統(tǒng)是否已經(jīng)進(jìn)入不安全區(qū),此方法允許系統(tǒng)在運行過程中發(fā)生死鎖。但可通過系統(tǒng)所設(shè)置的檢測機(jī)構(gòu),及時地檢測出死鎖的發(fā)生,并精確地確定與死鎖有關(guān)的進(jìn)程和資源,然后采取適當(dāng)措施,從系統(tǒng)中將已發(fā)生的死鎖清除掉。(4)解除死鎖.這是與檢測死鎖相配套的一種措施。當(dāng)檢測到系統(tǒng)中已發(fā)生死鎖時,須將進(jìn)程從死鎖狀態(tài)中解脫出來。常用的實施方法是撤銷或掛起一些進(jìn)程,以便回收一些資源,再將這些資源分配給已處于阻塞狀態(tài)的進(jìn)程,使之轉(zhuǎn)為就緒狀態(tài),以繼續(xù)運行。死鎖的檢測和解除措施,有可能使系統(tǒng)獲得較好的資源利用率和吞吐量,但在實現(xiàn)上難度也最大。解除與預(yù)防理解了死鎖的原因,尤其是產(chǎn)生死鎖的四個必要條件,就可以最大可能地避免

35、、預(yù)防和解除死鎖。所以,在系統(tǒng)設(shè)計、進(jìn)程調(diào)度等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配算法,避免進(jìn)程永久占據(jù)系統(tǒng)資源。此外,也要防止進(jìn)程在處于等待狀態(tài)的情況下占用資源,在系統(tǒng)運行過程中,對進(jìn)程發(fā)出的每一個系統(tǒng)能夠滿足的資源申請進(jìn)行動態(tài)檢查,并根據(jù)檢查結(jié)果決定是否分配資源,若分配后系統(tǒng)可能發(fā)生死鎖,則不予分配,否則予以分配。因此,對資源的分配要給予合理的規(guī)劃。有序資源分配法這種算法資源按某種規(guī)則系統(tǒng)中的所有資源統(tǒng)一編號(例如打印機(jī)為1、磁帶機(jī)為2、磁盤為3、等等),申請時必須以上升的次序。系統(tǒng)要求申請進(jìn)程:1、對它所必須使用的而且屬于同一類的所有資源,必須一次申請完;2、在申請

36、不同類資源時,必須按各類設(shè)備的編號依次申請。例如:進(jìn)程PA,使用資源的順序是R1,R2;進(jìn)程PB,使用資源的順序是R2,R1;若采用動態(tài)分配有可能形成環(huán)路條件,造成死鎖。采用有序資源分配法:R1的編號為1,R2的編號為2;PA:申請次序應(yīng)是:R1,R2 PB:申請次序應(yīng)是:R1,R2 這樣就破壞了環(huán)路條件,避免了死鎖的發(fā)生。銀行算法避免死鎖算法中最有代表性的算法是Dijkstra E.W 于1968年提出的銀行家算法:該算法需要檢查申請者對資源的最大需求量,如果系統(tǒng)現(xiàn)存的各類資源可以滿足申請者的請求,就滿足申請者的請求.這樣申請者就可很快完成其計算,然后釋放它占用的資源,從而保證了系統(tǒng)中的所有

37、進(jìn)程都能完成,所以可避免死鎖的發(fā)生.死鎖排除的方法1、撤消陷于死鎖的全部進(jìn)程;2、逐個撤消陷于死鎖的進(jìn)程,直到死鎖不存在;3、從陷于死鎖的進(jìn)程中逐個強迫放棄所占用的資源,直至死鎖消失。4、從另外一些進(jìn)程那里強行剝奪足夠數(shù)量的資源分配給死鎖進(jìn)程,以解除死鎖狀態(tài).12. 存儲過程提示:存儲過程(Stored Procedure)是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL 語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程的種類1。 系統(tǒng)存儲過程以sp_開頭,用來進(jìn)行系統(tǒng)的各項設(shè)定。取得信息。相關(guān)管理工作。2。 本地存儲過程用戶創(chuàng)

38、建的存儲過程是由用戶創(chuàng)建并完成某一特定功能的存儲過程,事實上一般所說的存儲過程就是指本地存儲過程。3. 臨時存儲過程分為兩種存儲過程:一是本地臨時存儲過程,以井字號(#)作為其名稱的第一個字符,則該存儲過程將成為一個存放在tempdb數(shù)據(jù)庫中的本地臨時存儲過程,且只有創(chuàng)建它的用戶才能執(zhí)行它; 二是全局臨時存儲過程,以兩個井字號(#)號開始,則該存儲過程將成為一個存儲在tempdb數(shù)據(jù)庫中的全局臨時存儲過程,全局臨時存儲過程一旦創(chuàng)建,以后連接到服務(wù)器的任意用戶都可以執(zhí)行它,而且不需要特定的權(quán)限。4。 遠(yuǎn)程存儲過程在SQL Server2005中,遠(yuǎn)程存儲過程(Remote Stored Proc

39、edures)是位于遠(yuǎn)程服務(wù)器上的存儲過程,通常可以使用分布式查詢和EXECUTE命令執(zhí)行一個遠(yuǎn)程存儲過程。5. 擴(kuò)展存儲過程擴(kuò)展存儲過程(Extended Stored Procedures)是用戶可以使用外部程序語言編寫的存儲過程,而且擴(kuò)展存儲過程的名稱通常以xp_開頭。存儲過程的優(yōu)點1。存儲過程因為SQL語句已經(jīng)預(yù)編繹過了,因此運行的速度比較快。2. 可保證數(shù)據(jù)的安全性和完整性.通過存儲過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全。通過存儲過程可以使相關(guān)的動作在一起發(fā)生,從而可以維護(hù)數(shù)據(jù)庫的完整性。3.可以降低網(wǎng)絡(luò)的通信量。存儲過程主要是在服務(wù)器上運行,減少對客

40、戶機(jī)的壓力.4。 存儲過程可以接受參數(shù)、輸出參數(shù)、返回單個或多個結(jié)果集以及返回值。可以向程序返回錯誤原因5。 存儲過程可以包含程序流、邏輯以及對數(shù)據(jù)庫的查詢。同時可以實體封裝和隱藏了數(shù)據(jù)邏輯。13。 觸發(fā)器提示:觸發(fā)器(trigger)是個特殊的存儲過程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動,而是由事件來觸發(fā),比如當(dāng)對一個表進(jìn)行操作( insert,delete, update)時就會激活它執(zhí)行。觸發(fā)器經(jīng)常用于加強數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。觸發(fā)器對表進(jìn)行插入、更新、刪除的時候會自動執(zhí)行的特殊存儲過程。觸發(fā)器一般用在check約束更加復(fù)雜的約束上面。觸發(fā)器可以從 DBA_TRIGGERS

41、,USER_TRIGGERS 數(shù)據(jù)字典中查到.觸發(fā)器和普通的存儲過程的區(qū)別是:觸發(fā)器是當(dāng)對某一個表進(jìn)行操作。諸如:update、insert、delete這些操作的時候,系統(tǒng)會自動調(diào)用執(zhí)行該表上對應(yīng)的觸發(fā)器。SQL Server 2005中觸發(fā)器可以分為兩類:DML觸發(fā)器和DDL觸發(fā)器,其中DDL觸發(fā)器它們會影響多種數(shù)據(jù)定義語言語句而激發(fā),這些語句有create、alter、drop語句.DML觸發(fā)器分類(根據(jù)觸發(fā)時間來分)1. after觸發(fā)器(之后觸發(fā))        (1)。 insert觸發(fā)器  

42、      (2)。 update觸發(fā)器        (3)。 delete觸發(fā)器   2。 instead of 觸發(fā)器(之前觸發(fā))其中after觸發(fā)器要求只有執(zhí)行某一操作insert、update、delete之后觸發(fā)器才被觸發(fā),且只能定義在表上。而instead of觸發(fā)器表示并不執(zhí)行其定義的操作(insert、update、delete)而僅是執(zhí)行觸發(fā)器本身。既可以在表上定義instead of觸發(fā)器,也可以在視圖上定義。 &

43、#160;    觸發(fā)器有兩個特殊的表:插入表(instered表)和刪除表(deleted表).這兩張是邏輯表也是虛表.有系統(tǒng)在內(nèi)存中創(chuàng)建者兩張表,不會存儲在數(shù)據(jù)庫中。而且兩張表的都是只讀的,只能讀取數(shù)據(jù)而不能修改數(shù)據(jù)。這兩張表的結(jié)果總是與被改觸發(fā)器應(yīng)用的表的結(jié)構(gòu)相同.當(dāng)觸發(fā)器完成工作后,這兩張表就會被刪除。Inserted表的數(shù)據(jù)是插入或是修改后的數(shù)據(jù),而deleted表的數(shù)據(jù)是更新前的或是刪除的數(shù)據(jù)。對表的操作Inserted邏輯表Deleted邏輯表增加記錄(insert)存放增加的記錄無刪除記錄(delete)無存放被刪除的記錄修改記錄(update)存

44、放更新后的記錄存放更新前的記錄    Update數(shù)據(jù)的時候就是先刪除表記錄,然后增加一條記錄.這樣在inserted和deleted表就都有update后的數(shù)據(jù)記錄了。注意的是:觸發(fā)器本身就是一個事務(wù),所以在觸發(fā)器里面可以對修改數(shù)據(jù)進(jìn)行一些特殊的檢查.如果不滿足可以利用事務(wù)回滾,撤銷操作。insert觸發(fā)器示例create trigger tri_insert on student for insert as declare student_id char(10) select student_id=s。student_id from student s inn

45、er join inserted i on s。student_id=i。student_id if student_id='0000000001 begin raiserror(不能插入1的學(xué)號!',16,8) rollback tran end go update觸發(fā)器示例create trigger tri_update on student for update as if update(student_id) begin raiserror(學(xué)號不能修改!,16,8) rollback tran end go delete觸發(fā)器示例create trigger tri

46、_delete on student for delete as declare student_id varchar(10) select student_id=student_id from deleted if student_id='admin begin raiserror('錯誤,16,8) rollback tran end14.內(nèi)聯(lián)接和外聯(lián)接的區(qū)別提示:連接查詢通過連接運算符可以實現(xiàn)多個表查詢。連接是關(guān)系數(shù)據(jù)庫模型的主要特點,也是它區(qū)別于其它類型數(shù)據(jù)庫管理系統(tǒng)的一個標(biāo)志。在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中,表建立時各數(shù)據(jù)之間的關(guān)系不必確定,常把一個實體的所有信息存放在一個表

47、中。當(dāng)檢索數(shù)據(jù)時,通過連接操作查詢出存放在多個表中的不同實體的信息。連接操作給用戶帶來很大的靈活性,他們可以在任何時候增加新的數(shù)據(jù)類型。為不同實體創(chuàng)建新的表,爾后通過連接進(jìn)行查詢.連接可以在SELECT 語句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出連接時有助于將連接操作與WHERE子句中的搜索條件區(qū)分開來。所以,在TransactSQL中推薦使用這種方法。SQL-92標(biāo)準(zhǔn)所定義的FROM子句的連接語法格式為:FROM join_table join_type join_tableON (join_condition)其中join_table指出參與連接操作的表名,連接

48、可以對同一個表操作,也可以對多表操作,對同一個表操作的連接又稱做自連接.join_type 指出連接類型,可分為三種:內(nèi)連接、外連接和交叉連接.內(nèi)連接(INNER JOIN)使用比較運算符進(jìn)行表間某(些)列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行。根據(jù)所使用的比較方式不同,內(nèi)連接又分為等值連接、自然連接和不等連接三種。外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內(nèi)連接不同的是,外連接不只列出與連接條件相匹配的行,而

49、是列出左表(左外連接時)、右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數(shù)據(jù)行.交叉連接(CROSS JOIN)沒有WHERE 子句,它返回連接表中所有數(shù)據(jù)行的笛卡爾積,其結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個表中符合查詢條件的數(shù)據(jù)行數(shù)。連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運算符、邏輯運算符等構(gòu)成。無論哪種連接都不能對text、ntext和image數(shù)據(jù)類型列進(jìn)行直接連接,但可以對這三種列進(jìn)行間接連接。例如:SELECT p1。pub_id,p2.pub_id,p1.pr_infoFROM pu

50、b_info AS p1 INNER JOIN pub_info AS p2ON DATALENGTH(p1.pr_info)=DATALENGTH(p2。pr_info)(一) 內(nèi)連接內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運算符比較被連接列的列值.內(nèi)連接分三種:1、等值連接:在連接條件中使用等于號(=)運算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列.2、不等連接:在連接條件使用除等于運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括>、=、=、<、!、!和.3、自然連接:在連接條件中使用等于(=)運算符比較被連接列的列值,

51、但它使用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。例,下面使用等值連接列出authors和publishers表中位于同一城市的作者和出版社: SELECT *FROM authors AS a INNER JOIN publishers AS pON a.city=p。city又如使用自然連接,在選擇列表中刪除authors 和publishers 表中重復(fù)列(city和state):SELECT a。,p.pub_id,p。pub_name,p.countryFROM authors AS a INNER JOIN publishers AS pON a.city=p。

52、city(二)外連接內(nèi)連接時,返回查詢結(jié)果集合中的僅是符合查詢條件( WHERE 搜索條件或 HAVING 條件)和連接條件的行。而采用外連接時,它返回到查詢結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時)、右表(右外連接時)或兩個邊接表(全外連接)中的所有數(shù)據(jù)行.如下面使用左外連接將論壇內(nèi)容和作者信息連接起來: SELECT a。,b. FROM luntan LEFT JOIN usertable as bON a.username=b。username下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市: SELECT a.,b。FRO

53、M city as a FULL OUTER JOIN user as bON a。username=b。username(三)交叉連接交叉連接不帶WHERE 子句,它返回被連接的兩個表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個表中符合查詢條件的數(shù)據(jù)行數(shù).例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數(shù)將等于68=48行。SELECT type,pub_nameFROM titles CROSS JOIN publishersORDER BY type例題說明內(nèi)連接和外連接的區(qū)別有兩個表A和表B。表A結(jié)構(gòu)如下:Aid:int;標(biāo)識種子,主鍵,自增IDAname:varchar數(shù)據(jù)情況,即用selec

溫馨提示

  • 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

提交評論