Oracle教程 (第6版)(Oracle 11g版) 課件 第1-5章 數(shù)據(jù)庫基礎(chǔ) - 索引與數(shù)據(jù)完整性_第1頁
Oracle教程 (第6版)(Oracle 11g版) 課件 第1-5章 數(shù)據(jù)庫基礎(chǔ) - 索引與數(shù)據(jù)完整性_第2頁
Oracle教程 (第6版)(Oracle 11g版) 課件 第1-5章 數(shù)據(jù)庫基礎(chǔ) - 索引與數(shù)據(jù)完整性_第3頁
Oracle教程 (第6版)(Oracle 11g版) 課件 第1-5章 數(shù)據(jù)庫基礎(chǔ) - 索引與數(shù)據(jù)完整性_第4頁
Oracle教程 (第6版)(Oracle 11g版) 課件 第1-5章 數(shù)據(jù)庫基礎(chǔ) - 索引與數(shù)據(jù)完整性_第5頁
已閱讀5頁,還剩351頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章數(shù)據(jù)庫基礎(chǔ)數(shù)據(jù)庫基本概念01數(shù)據(jù)庫系統(tǒng)1.?dāng)?shù)據(jù)庫2.?dāng)?shù)據(jù)庫管理系統(tǒng)3.?dāng)?shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫系統(tǒng)1.?dāng)?shù)據(jù)庫數(shù)據(jù)庫(DB)是存放數(shù)據(jù)的倉庫,這些數(shù)據(jù)是相關(guān)聯(lián)并按一定的格式存放在計(jì)算機(jī)內(nèi)的。例如,把一個(gè)學(xué)校的學(xué)生、課程、成績等數(shù)據(jù)有序地組織并存放在計(jì)算機(jī)內(nèi),就可以構(gòu)成一個(gè)數(shù)據(jù)庫。2.?dāng)?shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)(DBMS)是按一定的數(shù)據(jù)模型組織數(shù)據(jù)形成數(shù)據(jù)庫,并對(duì)數(shù)據(jù)庫進(jìn)行管理的系統(tǒng)。簡單地說,DBMS就是管理數(shù)據(jù)庫的系統(tǒng)(軟件)。數(shù)據(jù)庫系統(tǒng)管理員(DataBaseAdministrator,DBA)通過DBMS對(duì)數(shù)據(jù)庫進(jìn)行管理。數(shù)據(jù)庫系統(tǒng)3.?dāng)?shù)據(jù)庫系統(tǒng)數(shù)據(jù)、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)與操作數(shù)據(jù)庫的應(yīng)用程序,加上支撐它們的硬件平臺(tái)、軟件平臺(tái)和與數(shù)據(jù)庫有關(guān)的人員一起構(gòu)成了一個(gè)完整的數(shù)據(jù)庫系統(tǒng)。如圖所示為數(shù)據(jù)庫系統(tǒng)的構(gòu)成。02數(shù)據(jù)模型1.層次模型2.網(wǎng)狀模型3.關(guān)系模型數(shù)據(jù)模型1.層次模型層次模型將數(shù)據(jù)組織成一對(duì)多關(guān)系的結(jié)構(gòu),可采用關(guān)鍵字來訪問其中每個(gè)層次的每個(gè)部分。它的優(yōu)點(diǎn):存取方便且速度快;結(jié)構(gòu)清晰,容易理解;數(shù)據(jù)修改和數(shù)據(jù)庫擴(kuò)展容易實(shí)現(xiàn);檢索關(guān)鍵屬性十分方便。它的缺點(diǎn):結(jié)構(gòu)不夠靈活;同一屬性數(shù)據(jù)要存儲(chǔ)多次,數(shù)據(jù)冗余大;不適合于拓?fù)淇臻g數(shù)據(jù)的組織。如圖所示為按層次模型組織的數(shù)據(jù)示例。數(shù)據(jù)模型2.網(wǎng)狀模型網(wǎng)狀模型具有多對(duì)多類型的數(shù)據(jù)組織方式。它的優(yōu)點(diǎn):能明確而方便地表示數(shù)據(jù)間的復(fù)雜關(guān)系;數(shù)據(jù)冗余小。它的缺點(diǎn):網(wǎng)狀結(jié)構(gòu)的復(fù)雜性增加了用戶查詢和定位的困難;需要存儲(chǔ)數(shù)據(jù)間聯(lián)系的指針,使得數(shù)據(jù)量增大;數(shù)據(jù)的修改不方便。如圖所示為按網(wǎng)狀模型組織的數(shù)據(jù)示例。數(shù)據(jù)模型3.關(guān)系模型關(guān)系模型以記錄組或二維數(shù)據(jù)表的形式組織數(shù)據(jù),以便于利用各種實(shí)體與屬性之間的關(guān)系進(jìn)行存儲(chǔ)和變換,不分層也無指針,是建立空間數(shù)據(jù)和屬性數(shù)據(jù)之間關(guān)系的一種非常有效的數(shù)據(jù)組織方法。它的優(yōu)點(diǎn):結(jié)構(gòu)特別靈活,概念單一,能滿足所有布爾邏輯運(yùn)算和數(shù)學(xué)運(yùn)算規(guī)則形成的查詢要求;能搜索、組合和比較不同類型的數(shù)據(jù);增加和刪除數(shù)據(jù)的操作非常方便;具有更高的數(shù)據(jù)獨(dú)立性、更好的安全保密性。它的缺點(diǎn):當(dāng)數(shù)據(jù)庫大時(shí),查找滿足特定關(guān)系的數(shù)據(jù)會(huì)很費(fèi)時(shí),且無法表達(dá)空間關(guān)系。例如,在學(xué)生成績管理系統(tǒng)所涉及的“學(xué)生”表、“課程”表和“成績”表中,“學(xué)生”表的主要信息有學(xué)號(hào)、姓名、性別、出生時(shí)間、專業(yè)、總學(xué)分、備注;“課程”表的主要信息有課程號(hào)、課程名、開課學(xué)期、學(xué)時(shí)和學(xué)分;“成績”表的主要信息有學(xué)號(hào)、課程號(hào)和成績。數(shù)據(jù)模型如表所示分別描述了學(xué)生成績管理系統(tǒng)中“學(xué)生”表、“課程”表和“成績”表的部分?jǐn)?shù)據(jù)。學(xué)

號(hào)姓

名性

別出生時(shí)間專

業(yè)總

學(xué)

分備

注151101王林男1997-02-10計(jì)算機(jī)50

151103王燕女1996-10-06計(jì)算機(jī)50

151108林一帆男1996-08-05計(jì)算機(jī)52已提前修完一門課151202王林男1996-01-29通信工程40有一門課不及格,待補(bǔ)考151204馬琳琳女1996-02-10通信工程42

“學(xué)生”表課

號(hào)課

名開課學(xué)期學(xué)

時(shí)學(xué)

分0101計(jì)算機(jī)基礎(chǔ)18050102程序設(shè)計(jì)與語言26840206離散數(shù)學(xué)4684“課程”表數(shù)據(jù)模型學(xué)

號(hào)課

號(hào)成

績學(xué)

號(hào)課

號(hào)成

績15110110180151108101851511011027815110810264151101206761511082068715110310162151202101651511031027015120410191“成績”表表格中的一行稱為一個(gè)記錄,一列稱為一個(gè)字段,每列的標(biāo)題稱為字段名。如果給每個(gè)關(guān)系表取一個(gè)名字,則有n個(gè)字段的關(guān)系表結(jié)構(gòu)可表示為:關(guān)系表名(字段名1,…,字段名n),通常把關(guān)系表的結(jié)構(gòu)稱為關(guān)系模式。03關(guān)系數(shù)據(jù)庫語言關(guān)系數(shù)據(jù)庫語言(1)數(shù)據(jù)定義語言(DDL)。DDL用于執(zhí)行數(shù)據(jù)庫的任務(wù),對(duì)數(shù)據(jù)庫及數(shù)據(jù)庫中的各種對(duì)象進(jìn)行創(chuàng)建、刪除、修改等操作。如前所述,數(shù)據(jù)庫對(duì)象主要包括表、默認(rèn)約束、規(guī)則、視圖、觸發(fā)器、存儲(chǔ)過程。DDL包括的主要語句及功能如表。語

句功

能CREATE創(chuàng)建數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象ALTER對(duì)數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象進(jìn)行修改DROP刪除數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象關(guān)系數(shù)據(jù)庫語言(2)數(shù)據(jù)操縱語言(DML)。DML用于操縱數(shù)據(jù)庫中的各種對(duì)象,以及檢索和修改數(shù)據(jù)。DML包括的主要語句及功能如表。語

句功

能SELECT從表或視圖中檢索數(shù)據(jù)INSERT將數(shù)據(jù)插入到表或視圖中UPDATE修改表或視圖中的數(shù)據(jù)DELETE從表或視圖中刪除數(shù)據(jù)(3)數(shù)據(jù)控制語言(DCL)。DCL用于安全管理,可確定哪些用戶可以查看或修改數(shù)據(jù)庫中的數(shù)據(jù)。DCL包括的主要語句及功能如表。語

句功

能GRANT授予權(quán)限REVOKE收回權(quán)限D(zhuǎn)ENY收回權(quán)限,并禁止從其他角色繼承許可權(quán)限(4)數(shù)據(jù)查詢語言(DQL)。用戶通過SELECT語言實(shí)現(xiàn)各種查詢功能。第1章數(shù)據(jù)庫基礎(chǔ)數(shù)據(jù)庫設(shè)計(jì)01概念數(shù)據(jù)模型1.一對(duì)一的聯(lián)系(1∶1)2.一對(duì)多的聯(lián)系(1∶n)3.多對(duì)多的聯(lián)系(m∶n)概念數(shù)據(jù)模型把每個(gè)實(shí)體集涉及的信息項(xiàng)稱為屬性,就“學(xué)生”實(shí)體集而言,它的屬性有:學(xué)號(hào)、姓名、性別、出生時(shí)間、專業(yè)、總學(xué)分和備注。“課程”實(shí)體集屬性有:課程號(hào)、課程名、開課學(xué)期、學(xué)時(shí)和學(xué)分。實(shí)體集中的實(shí)體彼此是可區(qū)別的。如果實(shí)體集中的屬性或最小屬性組合的值能唯一標(biāo)識(shí)其對(duì)應(yīng)實(shí)體,則將該屬性或?qū)傩越M合稱為碼。碼可能有多個(gè),對(duì)于每一個(gè)實(shí)體集,可指定一個(gè)碼為主碼。如果用矩形框表示實(shí)體集,用帶半圓的矩形框表示屬性,用線段連接實(shí)體集與屬性,當(dāng)一個(gè)屬性或?qū)傩越M合指定為主碼時(shí),在實(shí)體集與屬性的連接線上標(biāo)記一斜線,則可以用如圖所示的形式描述學(xué)生成績管理系統(tǒng)中的實(shí)體集及每個(gè)實(shí)體集涉及的屬性。概念數(shù)據(jù)模型實(shí)體集A和實(shí)體集B之間存在各種關(guān)系,通常把這些關(guān)系稱為“聯(lián)系”。將實(shí)體集及實(shí)體集聯(lián)系的圖表示稱為實(shí)體(Entity)-聯(lián)系(Relationship)模型,即E-R模型。E-R圖就是E-R模型的描述方法,即實(shí)體-聯(lián)系圖。通常,關(guān)系數(shù)據(jù)庫的設(shè)計(jì)者使用E-R圖來對(duì)信息世界建模。在E-R圖中,用矩形表示實(shí)體型,用帶半圓的矩形框表示屬性,用菱形表示聯(lián)系。從分析用戶項(xiàng)目涉及的數(shù)據(jù)對(duì)象及數(shù)據(jù)對(duì)象之間的聯(lián)系出發(fā),到獲取E-R圖的這個(gè)過程稱為概念結(jié)構(gòu)設(shè)計(jì)。兩個(gè)實(shí)體集A和B之間的聯(lián)系可能是以下三種情況之一。1.一對(duì)一的聯(lián)系(1∶1)實(shí)體A中的一個(gè)實(shí)體最多與實(shí)體B中的一個(gè)實(shí)體相聯(lián)系,實(shí)體B中的一個(gè)實(shí)體也最多與實(shí)體A中的一個(gè)實(shí)體相聯(lián)系。例如,“班級(jí)”與“班長”這兩個(gè)實(shí)體集之間是一對(duì)一的聯(lián)系,因?yàn)橐粋€(gè)班級(jí)只有一個(gè)班長,反過來,一個(gè)班長只屬于一個(gè)班級(jí)?!鞍嗉?jí)”與“班長”兩個(gè)實(shí)體集的E-R圖如圖。概念數(shù)據(jù)模型2.一對(duì)多的聯(lián)系(1∶n)實(shí)體A中的一個(gè)實(shí)體可以與實(shí)體B中的多個(gè)實(shí)體相聯(lián)系,而實(shí)體B中的一個(gè)實(shí)體最多與實(shí)體A中的一個(gè)實(shí)體相聯(lián)系。例如,“班級(jí)”與“學(xué)生”這兩個(gè)實(shí)體集之間是一對(duì)多的聯(lián)系,因?yàn)橐粋€(gè)班級(jí)可有若干個(gè)學(xué)生,反過來,一個(gè)學(xué)生只能屬于一個(gè)班級(jí)?!鞍嗉?jí)”與“學(xué)生”兩個(gè)實(shí)體集的E-R圖如圖。概念數(shù)據(jù)模型3.多對(duì)多的聯(lián)系(m∶n)實(shí)體A中的一個(gè)實(shí)體可以與實(shí)體B中的多個(gè)實(shí)體相聯(lián)系,而實(shí)體B中的一個(gè)實(shí)體也可與實(shí)體A中的多個(gè)實(shí)體相聯(lián)系。例如,“學(xué)生”與“課程”這兩個(gè)實(shí)體集之間是多對(duì)多的聯(lián)系,因?yàn)橐粋€(gè)學(xué)生可選多門課程,反過來,一門課程可被多個(gè)學(xué)生選修。“學(xué)生”與“課程”兩個(gè)實(shí)體集的E-R圖如圖。02邏輯數(shù)據(jù)模型1.(1∶1)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換2.(1∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換3.(m∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換邏輯數(shù)據(jù)模型1.(1∶1)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換對(duì)于(1∶1)的聯(lián)系,既可以單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,也可以不單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式。(1)聯(lián)系單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,則由聯(lián)系屬性、參與聯(lián)系的各實(shí)體集的主碼屬性構(gòu)成關(guān)系模式,其主碼可選參與聯(lián)系實(shí)體集的任一方主碼。例如,考慮圖描述的“班級(jí)”(bjb)與“班長”(bzb)實(shí)體集通過屬于(syb)聯(lián)系E-R模型,可設(shè)計(jì)如下關(guān)系模式(下畫線表示該字段為主碼):bjb(班級(jí)編號(hào),院系,專業(yè),人數(shù))bzb(學(xué)號(hào),姓名)syb(學(xué)號(hào),班級(jí)編號(hào))邏輯數(shù)據(jù)模型(2)聯(lián)系不單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,將聯(lián)系的屬性及一方的主碼加入另一方實(shí)體集對(duì)應(yīng)的關(guān)系模式中。例如,考慮上圖描述的“班級(jí)”(bjb)與“班長”(bzb)實(shí)體集通過屬于(syb)聯(lián)系E-R模型,可設(shè)計(jì)如下關(guān)系模式:bjb(班級(jí)編號(hào),院系,專業(yè),人數(shù))bzb(學(xué)號(hào),姓名,班級(jí)編號(hào))或者:bjb(班級(jí)編號(hào),院系,專業(yè),人數(shù),學(xué)號(hào))bzb(學(xué)號(hào),姓名)邏輯數(shù)據(jù)模型2.(1∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換對(duì)于(1∶n)的聯(lián)系,既可以單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,也可以不單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式。(1)聯(lián)系單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,則由聯(lián)系的屬性、參與聯(lián)系的各實(shí)體集的主碼屬性構(gòu)成關(guān)系模式,n端的主碼作為該關(guān)系模式的主碼。例如,圖描述的“班級(jí)”(bjb)與“學(xué)生”(xsb)實(shí)體集E-R模型可設(shè)計(jì)如下關(guān)系模式:bjb(班級(jí)編號(hào),院系,專業(yè),人數(shù))xsb(學(xué)號(hào),姓名,性別,出生時(shí)間,專業(yè),總學(xué)分,備注)syb(學(xué)號(hào),班級(jí)編號(hào))(2)聯(lián)系不單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,則將聯(lián)系的屬性及1端的主碼加入n端實(shí)體集對(duì)應(yīng)的關(guān)系模式中,主碼仍為n端的主碼。例如,圖描述的“班級(jí)”(bjb)與“學(xué)生”(xsb)實(shí)體集E-R模型可設(shè)計(jì)如下關(guān)系模式:bjb(班級(jí)編號(hào),院系,專業(yè),人數(shù))xsb(學(xué)號(hào),姓名,性別,出生時(shí)間,專業(yè),總學(xué)分,備注,班級(jí)編號(hào))邏輯數(shù)據(jù)模型3.(m∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換對(duì)于(m∶n)的聯(lián)系,單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,該關(guān)系模式包括聯(lián)系的屬性、參與聯(lián)系的各實(shí)體集的主碼屬性,該關(guān)系模式的主碼由各實(shí)體集的主碼屬性共同組成。例如,圖描述的“學(xué)生”(xsb)與“課程”(kcb)實(shí)體集之間的聯(lián)系可設(shè)計(jì)如下關(guān)系模式:xsb(學(xué)號(hào),姓名,性別,出生時(shí)間,專業(yè),總學(xué)分,備注)kcb(課程號(hào),課程名稱,開課學(xué)期,學(xué)時(shí),學(xué)分)cjb(學(xué)號(hào),課程號(hào),成績)03物理數(shù)據(jù)模型物理數(shù)據(jù)模型物理數(shù)據(jù)模型(PhysicalDataModel)是面向計(jì)算機(jī)物理表示的模型,描述了數(shù)據(jù)在儲(chǔ)存介質(zhì)上的組織結(jié)構(gòu),它不但與具體的DBMS有關(guān),而且還與操作系統(tǒng)和硬件有關(guān)。每一種邏輯數(shù)據(jù)模型在實(shí)現(xiàn)時(shí)都有其對(duì)應(yīng)的物理數(shù)據(jù)模型。DBMS為了保證其獨(dú)立性與可移植性,大部分物理數(shù)據(jù)模型的實(shí)現(xiàn)工作由系統(tǒng)自動(dòng)完成,而設(shè)計(jì)者只要設(shè)計(jì)索引、聚集等特殊結(jié)構(gòu)即可。第2章Oracle11g數(shù)據(jù)庫介紹Oracle11g數(shù)據(jù)庫安裝Oracle11g數(shù)據(jù)庫安裝1.下載壓縮安裝包在網(wǎng)上下載Oracle11g數(shù)據(jù)庫的壓縮安裝包文件(win32_11gR2_database_1of2.zip和win32_11gR2_database_2of2.zip),共兩個(gè)文件,大小約2.1GB。將它們解壓到同一個(gè)目錄(database)下,然后雙擊解壓目錄中的setup.exe,系統(tǒng)加載并初步校驗(yàn)系統(tǒng)是否達(dá)到Oracle11g數(shù)據(jù)庫安裝的最低要求,只有達(dá)到要求,才會(huì)繼續(xù)加載程序并開始安裝。2.安裝過程(1)開始安裝后,首先出現(xiàn)如圖所示的“配置安全更新”窗口,取消勾選“我希望通過MyOracleSupport接收安全更新”復(fù)選項(xiàng),在“電子郵件”欄中填寫郵件地址(登錄甲骨文公司官網(wǎng)時(shí)注冊(cè)的),單擊“下一步”按鈕。Oracle11g數(shù)據(jù)庫安裝(2)在“選擇安裝選項(xiàng)”窗口中選擇“創(chuàng)建和配置數(shù)據(jù)庫”單選項(xiàng),如圖所示,單擊“下一步”按鈕。Oracle11g數(shù)據(jù)庫安裝(3)在“系統(tǒng)類”窗口中選擇軟件安裝的類型,如圖所示。因本書安裝Oracle11g數(shù)據(jù)庫僅用于教學(xué),故這里選中“桌面類”單選項(xiàng),單擊“下一步”按鈕。Oracle11g數(shù)據(jù)庫安裝(4)在“典型安裝配置”窗口中,設(shè)置Oracle基目錄、安裝軟件位置和數(shù)據(jù)庫文件位置,并選擇要安裝的數(shù)據(jù)庫版本和字符集(一般采取默認(rèn)選項(xiàng),但必須記住以便日后使用),如圖。Oracle11g數(shù)據(jù)庫安裝(5)若上一步檢查沒有問題,就會(huì)生成安裝設(shè)置概要信息,如圖所示,可保存這些信息到本地,方便以后查閱。Oracle11g數(shù)據(jù)庫安裝(6)安裝完成后,會(huì)彈出如圖所示的對(duì)話框。單擊“口令管理”按鈕,在彈出的對(duì)話框中解鎖以下用戶賬戶并修改其口令。①SYS(超級(jí)管理員),口令改為:Change_on_install123。②SYSTEM(普通管理員),口令改為:Manager123。③SCOTT(普通用戶),口令改為:Mm123456。Oracle11g數(shù)據(jù)庫安裝(7)若安裝成功,會(huì)出現(xiàn)如圖所示的窗口,單擊“關(guān)閉”按鈕即可。第2章Oracle11g數(shù)據(jù)庫介紹Oracle11g數(shù)據(jù)庫的基本結(jié)構(gòu)01內(nèi)部結(jié)構(gòu)

1.表空間2.表3.約束條件4.分區(qū)5.索引6.用戶7.方案8.同義詞9.權(quán)限及角色10.段、盤區(qū)和數(shù)據(jù)塊內(nèi)部結(jié)構(gòu)

1.表空間下面介紹Oracle11g數(shù)據(jù)庫默認(rèn)創(chuàng)建的主要表空間。(1)EXAMPLE表空間。EXAMPLE表空間是示例表空間,用于存放示例數(shù)據(jù)庫的方案對(duì)象信息及其培訓(xùn)資料。(2)SYSTEM表空間。SYSTEM表空間是系統(tǒng)表空間,用于存放Oracle系統(tǒng)內(nèi)部表和數(shù)據(jù)字典的數(shù)據(jù),如表名、列名和用戶名等。(3)SYSAUX表空間。SYSAUX表空間是輔助系統(tǒng)表空間,主要存放Oracle系統(tǒng)內(nèi)部的常用樣例用戶的對(duì)象,如存放CMR用戶的表和索引等,從而減少系統(tǒng)表空間的負(fù)荷。(4)TEMP表空間。TEMP表空間是臨時(shí)表空間,存放臨時(shí)表和臨時(shí)數(shù)據(jù),用于排序和匯總等。(5)UNDOTBS1表空間。UNDOTBS1表空間是重做表空間,存放數(shù)據(jù)庫中有關(guān)重做的相關(guān)信息和數(shù)據(jù)。當(dāng)用戶對(duì)數(shù)據(jù)庫表進(jìn)行修改(包括INSERT、UPDATE和DELETE操作)時(shí),Oracle系統(tǒng)自動(dòng)使用重做表空間來臨時(shí)存放修改前的數(shù)據(jù)。(6)USERS表空間。USERS表空間是用戶表空間,存放永久性用戶對(duì)象的數(shù)據(jù)和私有信息,因此也被稱為數(shù)據(jù)表空間。內(nèi)部結(jié)構(gòu)

2.表表是數(shù)據(jù)庫中存放用戶數(shù)據(jù)的對(duì)象。它包含一組固定的列,用來描述該表所跟蹤實(shí)體的屬性,每個(gè)列都有一個(gè)名字和若干個(gè)屬性。表結(jié)構(gòu)的樣例如圖。內(nèi)部結(jié)構(gòu)

3.約束條件為一個(gè)表創(chuàng)建約束條件時(shí),表中的每一行都必須滿足約束條件所定義的規(guī)定,約束條件有以下5種。(1)主鍵(PRIMARYKEY)。主鍵是表中的一列或多列。為表定義主鍵有如下幾個(gè)作用:主鍵包含的列不能輸入重復(fù)的值,以此來保證一個(gè)表的所有行的唯一性;主鍵也不允許定義此約束的列為NULL值;主鍵在定義此約束的列中創(chuàng)建了唯一性的索引。(2)默認(rèn)(DEFAULT)。在表中插入一行數(shù)據(jù),但沒有為列生成一個(gè)在定義表時(shí)預(yù)先指定的值。(3)檢查(CHECK)。檢查約束條件確保指定列中的值符合一定的條件。檢查列約束條件不能引用一個(gè)獨(dú)立表。非空值約束條件被數(shù)據(jù)庫看成一個(gè)檢查約束條件。(4)唯一性(UNIQUE)。唯一性約束條件用于保證應(yīng)具有唯一性而又不是主鍵的一部分的那些列的唯一性。(5)外鍵(FOREIGNKEY)。外鍵約束條件規(guī)定表間的關(guān)系性質(zhì)。一個(gè)外鍵使一個(gè)表的一列或多列與已定義為主鍵的表中的一批相同的列相關(guān)聯(lián)。內(nèi)部結(jié)構(gòu)

4.分區(qū)在非常大的數(shù)據(jù)庫中,可以通過把一個(gè)大表的數(shù)據(jù)分成多個(gè)小表來簡化數(shù)據(jù)庫的管理,這些小表稱為分區(qū)。除了對(duì)表分區(qū),還可以對(duì)索引分區(qū)。分區(qū)不僅簡化了數(shù)據(jù)庫的管理,還改善了其應(yīng)用性能。在Oracle中,能夠細(xì)分分區(qū),并創(chuàng)建子分區(qū)。例如,可以根據(jù)一組值分割一個(gè)表,然后再根據(jù)另一種分割方法分割分區(qū)。5.索引索引是幫助用戶在表中快速找到記錄的數(shù)據(jù)庫結(jié)構(gòu)。它既可以提高數(shù)據(jù)庫性能,又能夠保證列值的唯一性。當(dāng)CREATETABLE命令中規(guī)定有UNIQUE或PRIMARYKEY約束條件子句時(shí),Oracle就會(huì)自動(dòng)創(chuàng)建一個(gè)索引。也可以通過CREATEINDEX命令來手工創(chuàng)建索引。內(nèi)部結(jié)構(gòu)

6.用戶用戶賬號(hào)雖然不是數(shù)據(jù)庫中的一個(gè)物理結(jié)構(gòu),但它與數(shù)據(jù)庫中的對(duì)象有著重要的關(guān)系,這是因?yàn)橛脩魮碛袛?shù)據(jù)庫的對(duì)象。例如,用戶SYS擁有數(shù)據(jù)字典表,這些表內(nèi)存儲(chǔ)了數(shù)據(jù)庫中其他對(duì)象的所有信息;用戶SYSTEM擁有訪問數(shù)據(jù)字典表的視圖,這些視圖可供數(shù)據(jù)庫其他用戶使用。為數(shù)據(jù)庫創(chuàng)建對(duì)象(如表)必須在用戶賬戶下進(jìn)行。可以對(duì)每一個(gè)用戶賬戶進(jìn)行自定義,以便將一個(gè)特定的表空間作為其默認(rèn)表空間。7.方案用戶賬戶擁有的對(duì)象集稱為用戶的方案,它可以創(chuàng)建不能注冊(cè)到數(shù)據(jù)庫的用戶賬戶。用戶賬戶提供一種方案,用來保存一組被其他用戶方案分開的數(shù)據(jù)庫對(duì)象。8.同義詞為了給不同的用戶在使用數(shù)據(jù)庫對(duì)象時(shí),提供一個(gè)簡單的、唯一標(biāo)識(shí)數(shù)據(jù)庫對(duì)象的名稱,可以為數(shù)據(jù)庫對(duì)象創(chuàng)建同義詞。同義詞有公用同義詞和私有同義詞兩種。內(nèi)部結(jié)構(gòu)

9.權(quán)限及角色為了訪問其他賬戶的所有對(duì)象,必須先被授予訪問這個(gè)對(duì)象的權(quán)限。權(quán)限可以授予某個(gè)用戶或PUBLIC,PUBLIC再把權(quán)限授予數(shù)據(jù)庫中的全體用戶。創(chuàng)建角色即權(quán)限組來簡化權(quán)限的管理,可以把一些權(quán)限授予一個(gè)角色,而這個(gè)角色又可以被授予多個(gè)用戶。在應(yīng)用程序中,角色可以被動(dòng)態(tài)地啟用或禁用。10.段、盤區(qū)和數(shù)據(jù)塊依照不同的數(shù)據(jù)處理性質(zhì),可能需要在數(shù)據(jù)表空間內(nèi)劃分出不同的區(qū)域,以存放不同的數(shù)據(jù),將這些區(qū)域稱為段。例如,存放數(shù)據(jù)的區(qū)域稱為數(shù)據(jù)段、存放索引的區(qū)域稱為索引段。由于段是一個(gè)物理實(shí)體,所以必須把它分配到數(shù)據(jù)庫的一個(gè)表空間(數(shù)據(jù)文件)中,段其實(shí)就是由許多盤區(qū)組合而成的。當(dāng)段中的空間用完時(shí),該段就會(huì)獲取另外的盤區(qū)。內(nèi)部結(jié)構(gòu)

數(shù)據(jù)塊是最小的儲(chǔ)存單元,Oracle數(shù)據(jù)庫是操作系統(tǒng)塊的倍數(shù)。如圖所示說明了段、盤區(qū)和數(shù)據(jù)塊之間的關(guān)系。02外部結(jié)構(gòu)1.?dāng)?shù)據(jù)文件2.重做日志文件3.控制文件外部結(jié)構(gòu)1.?dāng)?shù)據(jù)文件每個(gè)Oracle數(shù)據(jù)庫都有一個(gè)或多個(gè)數(shù)據(jù)文件,且一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。數(shù)據(jù)文件創(chuàng)建后可改變大小,創(chuàng)建新的表空間需要?jiǎng)?chuàng)建新的數(shù)據(jù)文件。數(shù)據(jù)文件一旦加入表空間,就不能再移走,也不能和其他表空間發(fā)生聯(lián)系了。如果數(shù)據(jù)庫對(duì)象存儲(chǔ)在多個(gè)表空間中,可以通過把它們各自的數(shù)據(jù)文件存放在不同的磁盤上來對(duì)其進(jìn)行物理分割。數(shù)據(jù)庫、表空間和數(shù)據(jù)文件之間的關(guān)系如圖。2.重做日志文件除了數(shù)據(jù)文件,最重要的Oracle數(shù)據(jù)庫實(shí)體檔案就是重做日志文件。Oracle數(shù)據(jù)庫保存了所有數(shù)據(jù)庫事務(wù)的日志。這些事務(wù)被記錄在聯(lián)機(jī)重做日志文件中。當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)遭到破壞時(shí),可以用這些日志來恢復(fù)數(shù)據(jù)庫。一個(gè)數(shù)據(jù)庫至少需要兩個(gè)重做日志文件。Oracle數(shù)據(jù)庫以循環(huán)方式向重做日志文件中寫入。第一個(gè)日志被填滿后,就向第二個(gè)日志文件中寫入,然后以此類推。當(dāng)所有日志文件都被寫滿時(shí),就又會(huì)回到第一個(gè)日志文件,用新事務(wù)的數(shù)據(jù)對(duì)其進(jìn)行重寫。外部結(jié)構(gòu)3.控制文件每個(gè)Oracle數(shù)據(jù)庫都有一個(gè)控制文件,用以記錄與描述數(shù)據(jù)庫的外部結(jié)構(gòu),包括:(1)Oracle數(shù)據(jù)庫名稱與建立時(shí)間;(2)數(shù)據(jù)文件與重置日志文件名稱及其所在位置;(3)日志記錄序列碼。每當(dāng)數(shù)據(jù)庫被激活時(shí),Oracle就會(huì)在實(shí)例激活后立刻讀取控制文件的內(nèi)容,待所有數(shù)據(jù)庫外部結(jié)構(gòu)文件信息都收集完畢,數(shù)據(jù)庫才會(huì)啟動(dòng)。03數(shù)據(jù)庫實(shí)例1.系統(tǒng)全局區(qū)2.后臺(tái)進(jìn)程數(shù)據(jù)庫實(shí)例數(shù)據(jù)庫實(shí)例(Instance)也稱為服務(wù)器(Server),是指用來訪問數(shù)據(jù)庫文件集的存儲(chǔ)結(jié)構(gòu)系統(tǒng)全局區(qū)(SystemGlobalArea,SGA)及后臺(tái)進(jìn)程的集合。一個(gè)數(shù)據(jù)庫可以被多個(gè)實(shí)例訪問,這是Oracle數(shù)據(jù)庫的并行服務(wù)器選項(xiàng)。實(shí)例與數(shù)據(jù)庫之間的關(guān)系如圖。數(shù)據(jù)庫實(shí)例1.系統(tǒng)全局區(qū)當(dāng)激活Oracle11g數(shù)據(jù)庫時(shí),系統(tǒng)會(huì)先在內(nèi)存中規(guī)劃一個(gè)固定區(qū)域,用來存儲(chǔ)每位使用者所需存取的數(shù)據(jù),以及Oracle數(shù)據(jù)庫運(yùn)作時(shí)必備的系統(tǒng)信息。這個(gè)區(qū)域就稱為系統(tǒng)全局區(qū)(SGA)。SGA又包含數(shù)個(gè)重要區(qū)域,分別是數(shù)據(jù)塊緩存區(qū)(DataBlockBufferCache)、字典緩存區(qū)(DictionaryCache)、重做日志緩沖區(qū)(RedoLogBuffer)和SQL共享池(SharedSQLPool),如圖所示為SGA各重要區(qū)域之間的關(guān)系。數(shù)據(jù)庫實(shí)例(1)(2)(3)(4)數(shù)據(jù)塊緩存區(qū)。數(shù)據(jù)塊緩存區(qū)為SGA的主要成員,用來存放讀取數(shù)據(jù)文件的數(shù)據(jù)塊副本,或是使用者曾經(jīng)處理過的數(shù)據(jù)。它的用途在于有效減少存取數(shù)據(jù)時(shí)造成的磁盤讀/寫動(dòng)作,進(jìn)而提升數(shù)據(jù)存取的效率。字典緩存區(qū)。數(shù)據(jù)庫對(duì)象的信息存儲(chǔ)在數(shù)據(jù)字典中,這些信息包括用戶賬戶、數(shù)據(jù)文件名、盤區(qū)位置、表說明和權(quán)限等。當(dāng)數(shù)據(jù)庫需要這些信息(如驗(yàn)證用戶賬戶)時(shí),就要讀取數(shù)據(jù)字典,從中獲得需要的信息數(shù)據(jù),并且將這些數(shù)據(jù)存儲(chǔ)在SGA的字典緩存區(qū)中。重做日志緩沖區(qū)。聯(lián)機(jī)重做日志文件用于記錄數(shù)據(jù)庫的更改,以便在數(shù)據(jù)庫恢復(fù)過程中用于向前滾動(dòng)。但這些修改并不是馬上寫入日志文件中的,在被寫入聯(lián)機(jī)重做日志文件之前,事務(wù)首先被記錄在稱為重做日志緩沖區(qū)的SGA中。SQL共享池。SQL共享池存儲(chǔ)數(shù)據(jù)字典緩存區(qū)及庫緩存區(qū)(LibraryCache),即對(duì)數(shù)據(jù)庫進(jìn)行操作的語句信息。當(dāng)使用者將SQL共享池指令送至Oracle11g數(shù)據(jù)庫后,系統(tǒng)會(huì)先解析語法是否正確。解析時(shí)所需要的系統(tǒng)信息,以及解析后的結(jié)果將被放置在共享區(qū)內(nèi)。數(shù)據(jù)庫實(shí)例2.后臺(tái)進(jìn)程數(shù)據(jù)庫的物理結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)之間的關(guān)系是由后臺(tái)進(jìn)程來維持的。數(shù)據(jù)庫擁有多個(gè)后臺(tái)進(jìn)程,其數(shù)量取決于數(shù)據(jù)庫的配置。這些進(jìn)程由數(shù)據(jù)庫進(jìn)行很少的管理。每個(gè)進(jìn)程在數(shù)據(jù)庫中執(zhí)行不同的任務(wù),如圖所示為后臺(tái)進(jìn)程在數(shù)據(jù)庫外部結(jié)構(gòu)、SGA中的作用和地位。數(shù)據(jù)庫實(shí)例下面介紹幾個(gè)常用的后臺(tái)進(jìn)程。(1)DBWR(數(shù)據(jù)庫寫入進(jìn)程)。負(fù)責(zé)將數(shù)據(jù)緩存區(qū)內(nèi)變動(dòng)過的數(shù)據(jù)塊回寫至硬盤內(nèi)的數(shù)據(jù)文件。(2)LGWR(日志寫入進(jìn)程)。負(fù)責(zé)將重做日志緩沖區(qū)內(nèi)的數(shù)據(jù)變動(dòng)記錄循序?qū)懭胫刈鋈罩疚募?。?)SMON(系統(tǒng)監(jiān)控進(jìn)程)。如果因?yàn)橥k娀蚱渌蛩貙?dǎo)致Oracle11g數(shù)據(jù)庫不正常關(guān)閉,下一次激活數(shù)據(jù)庫時(shí)將由SMON進(jìn)行必要的數(shù)據(jù)庫修復(fù)。(4)PMON(進(jìn)程監(jiān)控進(jìn)程)。當(dāng)某個(gè)處理程序異常終止時(shí),PMON清除數(shù)據(jù)緩存區(qū)內(nèi)不再使用的空間,并釋放該程序之前使用的系統(tǒng)資源。(5)CKPT(檢查點(diǎn)進(jìn)程)。檢查點(diǎn)是指一個(gè)事件或指定的時(shí)間。在產(chǎn)生一個(gè)檢查點(diǎn)時(shí),CKPT可確保緩沖區(qū)內(nèi)經(jīng)常變動(dòng)的數(shù)據(jù)被定期寫入數(shù)據(jù)文件。(6)RECO(恢復(fù)進(jìn)程)。該進(jìn)程是在具有分布式選項(xiàng)時(shí)所使用的一個(gè)進(jìn)程,用于自動(dòng)解決在分布式事務(wù)中的故障。(7)ARCH(歸檔進(jìn)程)。LGWR后臺(tái)進(jìn)程以循環(huán)方式向重做日志文件寫入。當(dāng)以ARCHIVELOG模式運(yùn)行時(shí),數(shù)據(jù)庫在開始重寫重做日志文件之前會(huì)先對(duì)其進(jìn)行備份,將這些歸檔文件寫入磁盤設(shè)備。(8)LCKn(鎖進(jìn)程)。在Oracle系統(tǒng)并行服務(wù)器環(huán)境中,為了避免進(jìn)程間在數(shù)據(jù)存取時(shí)發(fā)生沖突,在一個(gè)數(shù)據(jù)庫實(shí)例訪問一個(gè)數(shù)據(jù)庫對(duì)象時(shí),LCKn進(jìn)程會(huì)自動(dòng)封鎖訪問的數(shù)據(jù)庫對(duì)象,在訪問結(jié)束之后再解鎖。(9)Dnnn(調(diào)度進(jìn)程)。調(diào)度進(jìn)程允許用戶共享有限的服務(wù)器進(jìn)程,該進(jìn)程接收用戶進(jìn)程的要求,并將其放入請(qǐng)求隊(duì)列中,然后為用戶進(jìn)程分配一個(gè)共享的服務(wù)器進(jìn)程。一個(gè)數(shù)據(jù)庫實(shí)例可以建立多個(gè)調(diào)度進(jìn)程。第2章Oracle11g數(shù)據(jù)庫介紹Oracle11g數(shù)據(jù)庫工具Oracle11g數(shù)據(jù)庫工具1.?dāng)?shù)據(jù)庫界面創(chuàng)建工具:DBCADBCA(DatabaseConfigurationAssistant)是Oracle11g數(shù)據(jù)庫提供的一個(gè)具有圖形化用戶界面的工具,用來幫助數(shù)據(jù)庫管理員快速、直觀地創(chuàng)建數(shù)據(jù)庫。DBCA可以通過“開始”菜單中的Oracle程序組選項(xiàng)來啟動(dòng),如圖。Oracle11g數(shù)據(jù)庫工具2.?dāng)?shù)據(jù)庫管理工具:SQLDeveloperSQLDeveloper工具可連接至任何Oracle或以上版本的Oracle系統(tǒng),且支持Windows、Linux和MacOSX等多種操作系統(tǒng)平臺(tái)。Oracle11g數(shù)據(jù)庫本身就集成了SQLDeveloper,故也可從Oracle程序組選項(xiàng)里直接啟動(dòng)它,如圖。Oracle11g數(shù)據(jù)庫工具首先出現(xiàn)SQLDeveloper的啟動(dòng)畫面,然后打開主界面。在主界面左側(cè)窗口中右擊“連接”→“新建連接”,彈出如圖所示的“新建/選擇數(shù)據(jù)庫連接”對(duì)話框,在其中設(shè)置連接參數(shù),這里設(shè)置連接名為myorcl,用戶名為SCOTT,口令為Mm123456,SID(數(shù)據(jù)庫標(biāo)識(shí))為XSCJ。Oracle11g數(shù)據(jù)庫工具3.?dāng)?shù)據(jù)庫管理工具:OEMOracle企業(yè)管理器(OracleEnterpriseManager,OEM)是一個(gè)基于Java的框架系統(tǒng)。該系統(tǒng)集成了多個(gè)組件,為用戶提供了功能強(qiáng)大的圖形用戶界面。OEM提供可以用于管理單個(gè)Oracle數(shù)據(jù)庫的工具,由于采用了基于Web的界面,它對(duì)數(shù)據(jù)庫的訪問也是通過HTTP/HTTPS協(xié)議的,即使用B/S模式訪問Oracle11g數(shù)據(jù)庫管理系統(tǒng)。使用OEM工具可以創(chuàng)建方案對(duì)象(表、視圖等)、管理數(shù)據(jù)庫的安全性(權(quán)限、角色、用戶等)、管理數(shù)據(jù)庫的內(nèi)存和存儲(chǔ)結(jié)構(gòu)、備份和恢復(fù)數(shù)據(jù)庫、導(dǎo)入和導(dǎo)出數(shù)據(jù),以及查詢數(shù)據(jù)庫的執(zhí)行情況和狀態(tài)等。Oracle11g數(shù)據(jù)庫工具4.命令管理工具:SQL*Plus啟動(dòng)SQL*Plus有兩種方式:通過Oracle程序組選項(xiàng)或Windows命令提示符。(1)通過程序組啟動(dòng)在桌面單擊“開始”→“所有程序”→“Oracle-OraDb11g_home1”→“應(yīng)用程序開發(fā)”→“SQLPlus”,進(jìn)入“SQLPlus”命令行窗口,輸入用戶名SCOTT,以及輸入口令(輸入的口令不在光標(biāo)處顯示)Mm123456,可連接到Oracle11g數(shù)據(jù)庫,顯示軟件相應(yīng)的版本信息,如圖。Oracle11g數(shù)據(jù)庫工具(2)通過命令提示符啟動(dòng)用程序組啟動(dòng)的SQL*Plus有個(gè)缺陷:不支持鼠標(biāo)右擊界面使用剪切、粘貼功能,此舉是Oracle11g數(shù)據(jù)庫系統(tǒng)采取的安全措施,但對(duì)普通用戶來說操作十分不方便(尤其在需要輸入大段的SQL語句代碼時(shí)),而改用Windows命令提示符窗口啟動(dòng)SQL*Plus,則可以使用這些功能。單擊“開始”→“所有程序”→“附件”→“命令提示符”,進(jìn)入“命令提示符”窗口。在該窗口中輸入命令sqlplus,會(huì)提示輸入用戶名和口令,如圖。第3章數(shù)據(jù)庫的創(chuàng)建和操作以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)使用DBCA創(chuàng)建學(xué)生成績管理數(shù)據(jù)庫XSCJ,其步驟如下。(1)啟動(dòng)DBCA,出現(xiàn)“歡迎使用”窗口,如圖所示,單擊“下一步”按鈕進(jìn)入創(chuàng)建數(shù)據(jù)庫的向?qū)?。以界面方式?chuàng)建數(shù)據(jù)庫(采用DBCA)(2)在“操作”窗口中,用戶可以選擇要執(zhí)行的操作,這里選中“創(chuàng)建數(shù)據(jù)庫”選項(xiàng),如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(3)在“數(shù)據(jù)庫模板”窗口中,選擇相應(yīng)選項(xiàng)后單擊“顯示詳細(xì)資料”按鈕,可查看該數(shù)據(jù)庫模板的各種信息。這里選擇“一般用途或事務(wù)處理”選項(xiàng),如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(4)在“數(shù)據(jù)庫標(biāo)識(shí)”窗口的“全局?jǐn)?shù)據(jù)庫名”和“SID”后輸入相關(guān)信息,如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(5)在“管理選項(xiàng)”窗口中可以勾選“配置EnterpriseManager”復(fù)選項(xiàng)或選擇“配置DatabaseControl以進(jìn)行本地管理”單選項(xiàng),這里保持默認(rèn)設(shè)置,如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(6)在“數(shù)據(jù)庫身份證明”窗口中,將所有賬戶設(shè)置為同一管理口令(Mm123456),如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(7)在“數(shù)據(jù)庫文件所在位置”窗口中,選擇“所有數(shù)據(jù)庫文件使用公共位置”選項(xiàng),單擊“瀏覽”按鈕,選擇數(shù)據(jù)庫文件的存放路徑,如圖所示,單擊“下一步”按鈕。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(8)在“恢復(fù)配置”窗口中采取默認(rèn)的配置,單擊“下一步”按鈕。(9)在“數(shù)據(jù)庫內(nèi)容”窗口中勾選“示例方案”復(fù)選項(xiàng),如圖所示,這樣就可以在學(xué)習(xí)的過程中參考標(biāo)準(zhǔn)設(shè)置,也可以了解基礎(chǔ)的數(shù)據(jù)庫創(chuàng)建方法和SQL語言。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(10)在“初始化參數(shù)”和“數(shù)據(jù)庫存儲(chǔ)”窗口中都保持默認(rèn)配置,分別單擊“下一步”按鈕。(11)在“創(chuàng)建選項(xiàng)”窗口中勾選“創(chuàng)建數(shù)據(jù)庫”復(fù)選項(xiàng),如圖所示,單擊“完成”按鈕,之后會(huì)彈出確認(rèn)創(chuàng)建的對(duì)話框,單擊“確定”按鈕開始創(chuàng)建數(shù)據(jù)庫。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(12)創(chuàng)建數(shù)據(jù)庫期間顯示的進(jìn)度窗口如圖所示,過程較為漫長,需要耐心等待……以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)(13)創(chuàng)建數(shù)據(jù)庫完畢后,系統(tǒng)會(huì)彈出窗口顯示相關(guān)的提示信息,如圖所示,需要在這一步解鎖SCOTT、SYSTEM、SYS賬戶并設(shè)置其口令,單擊“口令管理”按鈕,彈出“口令管理”對(duì)話框。以界面方式創(chuàng)建數(shù)據(jù)庫(采用DBCA)至此,所有步驟都已全部完成?,F(xiàn)在,系統(tǒng)服務(wù)中應(yīng)該已經(jīng)有SID為XSCJ的服務(wù)選項(xiàng)并已置為“自動(dòng)”啟動(dòng),服務(wù)正在運(yùn)行,如圖所示,訪問XSCJ數(shù)據(jù)庫前必須保證已啟動(dòng)了這兩個(gè)系統(tǒng)服務(wù):OracleOraDb11g_home1TNSListener和OracleServiceXSCJ。第3章數(shù)據(jù)庫的創(chuàng)建和操作以界面方式操作數(shù)據(jù)庫(采用SQLDeveloper)01表

作1.表的概念2.?dāng)?shù)據(jù)類型3.表結(jié)構(gòu)設(shè)計(jì)4.創(chuàng)建表5.修改表6.刪除表表

作1.表的概念表是日常工作和生活中經(jīng)常使用的一種表示數(shù)據(jù)及其關(guān)系的形式,如表所示就是用來表示學(xué)生信息的學(xué)生表。學(xué)

號(hào)姓

名性

別出生時(shí)間專

業(yè)總

學(xué)

分備

注151101王林男1997-02-10計(jì)算機(jī)50

151103王燕女1996-10-06計(jì)算機(jī)50

151108林一帆男1996-08-05計(jì)算機(jī)52已提前修完一門課151202王林男1996-01-29通信工程40有一門課不及格,待補(bǔ)考151204馬琳琳女1996-02-10通信工程42

作關(guān)系數(shù)據(jù)庫使用表(關(guān)系)來表示實(shí)體及其聯(lián)系。表包含下列概念。(1)表結(jié)構(gòu):每個(gè)表都包含一組固定的列,而列由數(shù)據(jù)類型(DATATYPE)和長度(LENGTH)兩部分組成,以描述該表所代表的實(shí)體的屬性。(2)記錄:每個(gè)表包含了若干行數(shù)據(jù),它們是表的“值”,其中的一行稱為一個(gè)記錄,因此,表是記錄的有限集合。(3)字段:每個(gè)記錄由若干個(gè)數(shù)據(jù)項(xiàng)構(gòu)成,將構(gòu)成記錄的數(shù)據(jù)項(xiàng)稱為字段。(4)關(guān)鍵字:若表中記錄的某個(gè)字段或字段組合能唯一標(biāo)識(shí)記錄,則稱該字段(字段組合)為候選關(guān)鍵字(Candidatekey)。表

作2.?dāng)?shù)據(jù)類型在設(shè)計(jì)表的列時(shí),必須為其指定數(shù)據(jù)類型,它決定了該列數(shù)據(jù)的取值、范圍和存儲(chǔ)格式。列的數(shù)據(jù)類型可以是Oracle系統(tǒng)的數(shù)據(jù)類型,如表。3.表結(jié)構(gòu)設(shè)計(jì)創(chuàng)建表的實(shí)質(zhì)就是定義表結(jié)構(gòu),以及設(shè)置表和列的屬性。在創(chuàng)建表之前,先要確定表的名字和屬性,同時(shí)確定表所包含的列名、列的數(shù)據(jù)類型、長度、是否可為空值、約束條件、默認(rèn)值設(shè)置、規(guī)則,以及所需索引、哪些列是主鍵、哪些列是外鍵等屬性,這些屬性構(gòu)成了表結(jié)構(gòu)。這里以學(xué)生成績管理系統(tǒng)的三個(gè)表,即學(xué)生表(表名為XSB)、課程表(表名為KCB)和成績表(表名為CJB)為例介紹如何設(shè)計(jì)表的結(jié)構(gòu)。表

作在XSB表中,只有“學(xué)號(hào)”列能唯一標(biāo)識(shí)一個(gè)學(xué)生,所以將該列設(shè)為主鍵。最終設(shè)計(jì)出XSB的表結(jié)構(gòu)如表所示。列

名數(shù)據(jù)類型是否可空默

認(rèn)

值說

明學(xué)號(hào)char(6)×無主鍵姓名char(8)×無

性別char(2)ד男”

出生時(shí)間date×無

專業(yè)char(12)√無

總學(xué)分number(2)√00≤總學(xué)分<100備注varchar2(200)√無

作參照XSB表結(jié)構(gòu)的設(shè)計(jì)方法,同樣可以設(shè)計(jì)出其他兩個(gè)表的結(jié)構(gòu),如表所示是KCB的表結(jié)構(gòu),如表所示是CJB的表結(jié)構(gòu)。列

名數(shù)據(jù)類型是否可空默

認(rèn)

值說

明課程號(hào)char(3)×無主鍵課程名char(16)×無

開課學(xué)期number(1)√1只能為1~8學(xué)時(shí)number(2)√0

學(xué)分number(1)×0

KCB的表結(jié)構(gòu)列

名數(shù)據(jù)類型是否可空默

認(rèn)

值說

明學(xué)號(hào)char(6)×無主鍵課程號(hào)char(3)×無主鍵成績number(2)√無

CJB的表結(jié)構(gòu)表

作4.創(chuàng)建表這里以創(chuàng)建XSB表為例,操作的步驟如下。(1)啟動(dòng)SQLDeveloper,在“連接”節(jié)點(diǎn)下打開數(shù)據(jù)庫連接myorcl(已創(chuàng)建)。右擊“表”節(jié)點(diǎn),選擇“新建表”菜單項(xiàng)。(2)進(jìn)入“創(chuàng)建表”窗口,在“名稱”欄中填寫表名XSB,在“表”選項(xiàng)卡的“列名”、“類型”、“大小”、“非空”和“主鍵”欄中分別填入(選擇)XSB表中“學(xué)號(hào)”列的列名、數(shù)據(jù)類型、長度、非空性和是否為主鍵等信息,完成后單擊“添加列”按鈕輸入下一列,直到輸入完所有的列為止,如圖。表

作(3)輸入完最后一列的信息后,勾選右上角的“高級(jí)”復(fù)選項(xiàng),這時(shí)會(huì)顯示出更多的表選項(xiàng),如圖所示,如要設(shè)置默認(rèn)值可以在“列屬性”的“默認(rèn)”欄中輸入默認(rèn)值。這里暫不對(duì)其他選項(xiàng)進(jìn)行設(shè)置,單擊“確定”按鈕完成表的創(chuàng)建。表

作5.修改表使用SQLDeveloper工具修改表的方法很簡單。XSB表創(chuàng)建完成后,在主界面的“表”目錄下可以找到該表。右擊XSB表,選擇“編輯”菜單項(xiàng),進(jìn)入“編輯表”窗口,在該窗口中的“列”選項(xiàng)頁右側(cè)單擊按鈕可以添加新列,單擊按鈕可以刪除列,在“列屬性”選項(xiàng)頁的各欄中可以修改列的屬性。表的主鍵列不能直接刪除,要?jiǎng)h除必須先取消主鍵。單擊窗口左側(cè)“主鍵”選項(xiàng),在窗口右邊的“所選列”欄中會(huì)顯示已被設(shè)為主鍵的列,如圖。表

作6.刪除表以刪除XSB表為例,在“表”目錄下右擊XSB表選擇“表”菜單下的“刪除”子菜單項(xiàng),如圖所示,之后彈出“刪除”對(duì)話框,勾選“級(jí)聯(lián)約束條件”復(fù)選項(xiàng),單擊“應(yīng)用”按鈕,彈出表已刪除的提示消息,單擊“確定”按鈕即可。02表數(shù)據(jù)操作1.插入記錄2.修改記錄3.刪除記錄4.撤銷操作表數(shù)據(jù)操作1.插入記錄首先,啟動(dòng)SQLDeveloper,打開myorcl連接(需要輸入SCOTT用戶口令),展開“表”目錄,選擇“XSB”表,在右邊窗口中選擇“數(shù)據(jù)”選項(xiàng),切換到表數(shù)據(jù)窗口,如圖。表數(shù)據(jù)操作輸入完一行數(shù)據(jù)后,單擊(提交)按鈕將數(shù)據(jù)保存到數(shù)據(jù)庫中,同時(shí)下方的“DataEditor-日志”子窗口列出用于插入數(shù)據(jù)的INSERT語句,如圖。表數(shù)據(jù)操作2.修改記錄修改記錄的方法與插入記錄類似,在“數(shù)據(jù)”選項(xiàng)頁找到要修改的記錄所在行,修改后該行的行號(hào)前會(huì)出現(xiàn)一個(gè)“*”號(hào),如圖所示,更改完成單擊“提交”按鈕保存修改的數(shù)據(jù)。表數(shù)據(jù)操作3.刪除記錄如果要?jiǎng)h除一行記錄,選中該行,單擊(刪除所選行)按鈕,之后該行的行號(hào)前會(huì)出現(xiàn)一個(gè)“-”號(hào),如圖所示,單擊“提交”按鈕確認(rèn)刪除。表數(shù)據(jù)操作4.撤銷操作如果需要撤銷之前對(duì)表中記錄所做的操作,只需在單擊“提交”按鈕之前單擊(回退)按鈕即可,圖3.21所示為撤銷上一步的刪除操作。03執(zhí)行SQL命令執(zhí)行SQL命令啟動(dòng)SQLDeveloper,單擊工具欄按鈕的右下箭頭選擇“myorcl”選項(xiàng),界面上將出現(xiàn)命令編輯區(qū),如圖所示,在其中輸入要運(yùn)行的SQL語句如下:CREATETABLExsb(

學(xué)號(hào) char(6) NOTNULLPRIMARYKEY,

姓名 char(8) NOTNULL,

性別 char(2) DEFAULT'男'NOTNULL,

出生時(shí)間date NOTNULL,

專業(yè) char(12) NULL,

總學(xué)分number(2) NULL,

備注 varchar2(200) NULL);執(zhí)行SQL命令這里以執(zhí)行創(chuàng)建表的CREATETABLE命令(詳見第3.3節(jié))為例,操作前須先刪除已創(chuàng)建的XSB表,輸入完命令后單擊窗口上方的或按鈕即可執(zhí)行該SQL語句重新創(chuàng)建XSB表。建表完成后,可往其中錄入樣本數(shù)據(jù)(見附錄A)以備后用,如圖。第3章數(shù)據(jù)庫的創(chuàng)建和操作以命令方式操作數(shù)據(jù)庫(采用SQL*Plus)01創(chuàng)

表創(chuàng)

表在以自己的模式創(chuàng)建表時(shí),必須擁有CREATETABLE系統(tǒng)權(quán)限;在其他用戶模式中創(chuàng)建表時(shí),必須擁有CREATEANYTABLE系統(tǒng)權(quán)限。Oracle創(chuàng)建表使用CREATETABLE語句,其基本的語法格式為:CREATETABLE[用戶方案名.]表名(

列名1數(shù)據(jù)類型[DEFAULT默認(rèn)值][列約束]

列名2數(shù)據(jù)類型[DEFAULT默認(rèn)值][列約束] [,…n]

表約束[,…n]) [AS子查詢]相關(guān)參數(shù)說明如下。(1)用戶方案名:用戶方案是指該表所屬的用戶,如果省略則默認(rèn)為當(dāng)前登錄的用戶。(2)DEFAULT:關(guān)鍵字DEFAULT指定某個(gè)列的默認(rèn)值。默認(rèn)值的數(shù)據(jù)類型必須與該列的數(shù)據(jù)類型相匹配,列的長度必須足以容納這個(gè)表達(dá)式值。(3)列約束:定義一個(gè)完整性約束作為列定義的一部分,該子句的語法如下。(4)表約束:定義一個(gè)完整性約束作為表定義的一部分,有關(guān)完整性約束的內(nèi)容會(huì)在第5章詳細(xì)介紹。(5)AS子查詢:表示將由子查詢返回的行插入到所創(chuàng)建的表中,子查詢的使用將在第4.2.2節(jié)中具體介紹。[NOT]NULL[UNIQUE][PRIMARYKEY][REFERENCES[用戶方案名.]表名(列名)][CHECK(條件表達(dá)式)]創(chuàng)

表【例3.1】

利用CREATETABLE命令為XSCJ數(shù)據(jù)庫建立KCB表,其表結(jié)構(gòu)可參見表。列

名數(shù)據(jù)類型是否可空默

認(rèn)

值說

明課程號(hào)char(3)×無主鍵課程名char(16)×無

開課學(xué)期number(1)√1只能為1~8學(xué)時(shí)number(2)√0

學(xué)分number(1)×0

CREATETABLEkcb(

課程號(hào) char(3) NOTNULLPRIMARYKEY,

課程名 char(16) NOTNULL,

開課學(xué)期 number(1) NULL,

學(xué)時(shí) number(2) NULL,

學(xué)分 number(1) NOTNULL);創(chuàng)

表創(chuàng)建完畢,用命令“DESCRIBEkcb;”可查看KCB表結(jié)構(gòu),如圖。如果表的主鍵由兩個(gè)或多個(gè)列構(gòu)成,則必須使用PRIMARYKEY關(guān)鍵字定義為表的完整性約束,語法格式為:CREATETABLE表名(

列名1數(shù)據(jù)類型[DEFAULT默認(rèn)值][列約束][,…n]PRIMARYKEY(列名1,列名2[,...n]))創(chuàng)

表【例3.2】

利用CREATETABLE命令為XSCJ數(shù)據(jù)庫建立CJB表,其表結(jié)構(gòu)參見表。CREATETABLEcjb(

學(xué)號(hào) char(6) NOTNULL,

課程號(hào) char(3) NOTNULL,

成績 number(2) NULL, PRIMARYKEY(學(xué)號(hào),課程號(hào)))列

名數(shù)據(jù)類型是否可空默

認(rèn)

值說

明學(xué)號(hào)char(6)×無主鍵課程號(hào)char(3)×無主鍵成績number(2)√無

創(chuàng)

表【例3.3】

創(chuàng)建XSB表中計(jì)算機(jī)專業(yè)學(xué)生的記錄備份表,表名為XS_JSJ。CREATETABLEXS_JSJ ASSELECT* FROMXSB WHERE專業(yè)='計(jì)算機(jī)';創(chuàng)建完畢,可用SQLDeveloper查看結(jié)果,如圖所示,可以看到XS_JSJ表中存儲(chǔ)(備份)了XSB表中計(jì)算機(jī)專業(yè)全部11名學(xué)生的記錄。02修

表修

表修改表結(jié)構(gòu)使用ALTERTABLE語句,語法格式為:ALTERTABLE[用戶方案名.]表名 [ADD(新列名數(shù)據(jù)類型[DEFAULT默認(rèn)值][列約束],…n)] /*增加新列*/ [MODIFY([列名[數(shù)據(jù)類型][DEFAULT默認(rèn)值][列約束],…n)] /*修改已有列屬性*/ [DROP子句] /*刪除列或約束條件*/相關(guān)參數(shù)說明如下。(1)ADD子句:用于向表中增加一個(gè)新列,新的列定義和創(chuàng)建表時(shí)列定義的格式一樣,一次可添加多個(gè)列,中間用逗號(hào)隔開。(2)MODIFY子句:用于修改表中某列的屬性(數(shù)據(jù)類型、默認(rèn)值等)。(3)DROP子句:該子句用于從表中刪除指定的字段或約束,語法格式為:DROP{ COLUMN列名

∣PRIMARY[KEY]

∣UNIQUE(列名,…n)

∣CONSTRAINT約束名

∣[CASCADE]}修

表【例3.4】

使用ALTERTABLE語句修改XSCJ數(shù)據(jù)庫中的XS_JSJ表。(1)在XS_JSJ表中增加兩列:獎(jiǎng)學(xué)金等級(jí)和等級(jí)說明。ALTERTABLExs_jsj ADD(獎(jiǎng)學(xué)金等級(jí)number(1),

等級(jí)說明varchar2(40)DEFAULT'獎(jiǎng)金1000元');運(yùn)行結(jié)果如圖。修

表(2)在XS_JSJ表中修改“等級(jí)說明”列的默認(rèn)值。ALTERTABLExs_jsj MODIFY(等級(jí)說明DEFAULT'獎(jiǎng)金800元');運(yùn)行語句后,打開SQLDeveloper的“編輯表”窗口查看XS_JSJ表的列屬性,可見“等級(jí)說明”列的默認(rèn)值已改為“獎(jiǎng)金800元”,如圖。修

表(3)在XS_JSJ表中刪除“獎(jiǎng)學(xué)金等級(jí)”和“等級(jí)說明”列。ALTERTABLExs_jsj DROPCOLUMN獎(jiǎng)學(xué)金等級(jí);ALTERTABLExs_jsj DROPCOLUMN等級(jí)說明;運(yùn)行結(jié)果如圖。修

表(4)為XS_JSJ表添加主鍵。ALTERTABLExs_jsj ADD(CONSTRAINT"PK_JSJ"PRIMARYKEY(學(xué)號(hào)));運(yùn)行語句后,打開SQLDeveloper的“編輯表”窗口,可以看到“學(xué)號(hào)”列已被設(shè)為主鍵,如圖。03刪

表刪

表語法格式為:DROPTABLE[用戶方案名.]表名如要?jiǎng)h除表XS_JSJ,使用如下語句:DROPTABLExs_jsj;執(zhí)行結(jié)果如圖。04插入記錄1.INSERT語句2.MERGE語句插入記錄1.INSERT語句插入記錄一般使用INSERT語句,語法格式為:INSERTINTO表名[(列名1,列名2,…n)]VALUES(列值1,列值2,…n)相關(guān)參數(shù)說明如下。(1)在插入時(shí),列值表必須與列名表順序和數(shù)據(jù)類型一致。(2)VALUES中描述的值可以是一個(gè)常量、變量或一個(gè)表達(dá)式。(3)如果列值為空,則值必須設(shè)置為NULL。(4)在對(duì)表進(jìn)行插入行操作時(shí),若新插入的行中所有可取空值的列值均取空值,則可以在INSERT語句中通過列表指出插入的行值中所包含非空的列,而在VALUES中只要給出這些列的值即可。插入記錄【例3.5】

向XSCJ數(shù)據(jù)庫的XSB表中插入一行: 151114周何駿

計(jì)算機(jī)

男1998-09-2590可以使用SQL語句:INSERTINTOxsb(學(xué)號(hào),姓名,性別,出生時(shí)間,專業(yè),總學(xué)分) VALUES('151114','周何駿','男',TO_DATE('19980925','YYYYMMDD'),'計(jì)算機(jī)',90);或者執(zhí)行下列命令:INSERTINTOxsb VALUES('151114','周何駿','男','1998-09-25','計(jì)算機(jī)',90,NULL);然后再運(yùn)行COMMIT命令:COMMIT;插入記錄最后,使用SELECT語句查詢是否添加了該行記錄:SELECT學(xué)號(hào),姓名,性別,出生時(shí)間,專業(yè),總學(xué)分 FROMxsb WHERE學(xué)號(hào)='151114';運(yùn)行結(jié)果如圖。插入記錄【例3.6】向具有默認(rèn)值字段的表中插入記錄。創(chuàng)建一個(gè)具有默認(rèn)值字段的表test:CREATETABLEtest(

姓名 char(20) NOTNULL,

專業(yè) varchar2(30) DEFAULT('計(jì)算機(jī)'),

年級(jí) number NOTNULL);用INSERT向test表中插入一條記錄:INSERTINTOtest(姓名,年級(jí))VALUES('周何駿',3);運(yùn)行結(jié)果如圖。插入記錄利用INSERT語句還可以把一個(gè)表中的部分?jǐn)?shù)據(jù)插入到另一個(gè)表中,但結(jié)果集中每行數(shù)據(jù)的字段數(shù)、字段的數(shù)據(jù)類型都要與被操作的表完全一致,語法格式為:INSERTINTO表名

結(jié)果集其中,結(jié)果集是一個(gè)由SELECT語句查詢所得到的新表。利用該參數(shù),可把一個(gè)表的部分?jǐn)?shù)據(jù)插入指定的另一個(gè)表中。【例3.7】

用CREATE語句建立XSB1表:CREATETABLExsb1( num char(6) NOTNULL, name char(8) NOTNULL, Speciality char(12) NULL);插入記錄然后用INSERT語句向XSB1表中插入數(shù)據(jù):INSERTINTOxsb1 SELECT學(xué)號(hào),姓名,專業(yè) FROMxsb WHERE姓名='王林';這條INSERT語句將XSB表中姓名為“王林”的學(xué)號(hào)、姓名和專業(yè)的值插入到XSB1表的各行中。運(yùn)行結(jié)果如圖。插入記錄2.MERGE語句在Oracle11g數(shù)據(jù)庫中有MERGE語句,用于根據(jù)與源表連接的結(jié)果,對(duì)目標(biāo)表執(zhí)行插入、更新或刪除操作。如根據(jù)在一個(gè)表中找到的差異在另一個(gè)表中進(jìn)行插入、更新或刪除行的操作,這種方法可以對(duì)兩個(gè)表進(jìn)行信息同步,其語法格式為:MERGEINTO目標(biāo)表名 USING源表名ON(條件表達(dá)式) WHENMATCHEDTHEN{UPDATESET…|DELETE…} WHENNOTMATCHEDTHENINSERT(…)VALUES(…)相關(guān)參數(shù)說明如下。(1)USING子句:指定用于更新的源數(shù)據(jù)表。(2)ON子句:指定在源表與目標(biāo)表進(jìn)行連接時(shí)所遵循的條件。(3)WHENMATCHED子句:表示在應(yīng)用ON子句的條件后,目標(biāo)表存在與源表匹配的行時(shí),對(duì)這些行在THEN子句中指定修改或刪除的操作。(4)WHENNOTMATCHED子句:指定對(duì)于源表中滿足了ON子句中條件的每一行,如果該行與目標(biāo)表中的行不匹配,則向目標(biāo)表中插入這行數(shù)據(jù)。插入記錄【例3.8】創(chuàng)建表a,并將XSB表中的數(shù)據(jù)添加至該表中。創(chuàng)建表a的語句為:CREATETABLEa( XH char(6) NOTNULLPRIMARYKEY, XM char(8) NOTNULL, XB char(2) NOTNULL, CSSJ date NOTNULL, ZY char(12) NULL, ZXF number(2) NULL, BZ varchar(200) NULL);插入記錄進(jìn)行信息同步使用的語句為:MERGEINTOa USINGxsbON(a.xh=xsb.學(xué)號(hào)) WHENMATCHED THENUPDATESETa.xm=xsb.姓名,a.xb=xsb.性別,a.cssj=xsb.出生時(shí)間, a.zy=xsb.專業(yè),a.zxf=xsb.總學(xué)分,a.bz=xsb.備注 WHENNOTMATCHED THENINSERTVALUES(XSB.學(xué)號(hào),xsb.姓名,xsb.性別,xsb.出生時(shí)間,xsb.專業(yè), xsb.總學(xué)分,xsb.備注);運(yùn)行上述語句后查看表a中的數(shù)據(jù),如圖所示,表a中已經(jīng)添加了XSB表中的全部數(shù)據(jù)。05刪除記錄1.DELETE語句2.TRANCATETABLE語句刪除記錄1.DELETE語句語法格式為:DELETEFROM表名 [WHERE條件表達(dá)式]該語句的功能為從指定的表中刪除滿足條件的行,若省略WHERE子句,則表示刪除所有行?!纠?.9】將XSCJ數(shù)據(jù)庫的表a中ZXF(總學(xué)分)值小于50的行刪除,使用的SQL語句為:DELETEFROMa WHEREzxf<50;運(yùn)行結(jié)果如圖所示,可以看到,此時(shí)表a中只剩下12條ZXF值大于或等于50的學(xué)生記錄,所有小于50的記錄都已被刪除。刪除記錄2.TRANCATETABLE語句如果確實(shí)要?jiǎng)h除一個(gè)大表里的全部記錄,可以使用TRUNCATETABLE語句,它能釋放占用的數(shù)據(jù)塊表空間,且此操作不可回退。其語法格式為:TRUNCATETABLE表名由于TRUNCATETABLE語句刪除表中的所有數(shù)據(jù)且不能恢復(fù),所以使用時(shí)要謹(jǐn)慎。使用TRUNCATETABLE刪除了指定表中的所有行,但表的結(jié)構(gòu)及其列、約束、索引等保持不變。06修改記錄修改記錄UPDATE語句可以用來修改表中的數(shù)據(jù)行,其語法格式為:UPDATE表名 SET列名={新值|表達(dá)式}[,…n] [WHERE條件表達(dá)式]該語句在指定表的滿足條件記錄中,由SET指定列值設(shè)置為SET的新值?!纠?.10】

將XSCJ數(shù)據(jù)庫的XSB表中學(xué)號(hào)為“151114”的學(xué)生備注列值設(shè)置為“輔修計(jì)算機(jī)專業(yè)”,使用的SQL語句為:UPDATExsb SET備注='輔修計(jì)算機(jī)專業(yè)' WHERE學(xué)號(hào)='151114';修改記錄在SQLDeveloper中查詢XSB表的數(shù)據(jù),可以發(fā)現(xiàn)表中學(xué)號(hào)為“151114”行的備注字段值已設(shè)置為需要的內(nèi)容,如圖所示。修改記錄【例3.11】

將表a中所有學(xué)生的ZXF(總學(xué)分)都增加5分。UPDATEa SETzxf=zxf+5;運(yùn)行結(jié)果如圖。修改記錄【例3.12】

將XSB表中姓名為“周何駿”的專業(yè)改為“通信工程”,學(xué)號(hào)改為“151242”。UPDATExsb SET專業(yè)='通信工程',

學(xué)號(hào)='151242' WHERE姓名='周何駿';運(yùn)行結(jié)果如圖。第4章數(shù)據(jù)庫的查詢和視圖選擇運(yùn)算、投影運(yùn)算和連接運(yùn)算01選擇運(yùn)算選擇運(yùn)算該運(yùn)算按給定的條件,從表中選出滿足條件的行形成一個(gè)新表,作為運(yùn)算結(jié)果?!纠?.1】

學(xué)生表如表所示。學(xué)

號(hào)姓

名性

別平均成績154215王

敏男74154211李小琳女82154210胡小平男88若要在學(xué)生表中找出性別為女且平均成績?cè)?0分以上的行形成一個(gè)新表,則該選擇運(yùn)算的結(jié)果如表所示。學(xué)

號(hào)姓

名性

別平均成績154211李小琳女8202投影運(yùn)算投影運(yùn)算投影運(yùn)算(Projection)也是單目運(yùn)算。它只選擇表中指定的列,這樣在查詢結(jié)果時(shí)就可減少顯示的數(shù)據(jù)量,提高了查詢的性能。【例4.2】

若在上表中對(duì)“姓名”和“平均成績”進(jìn)行投影運(yùn)算,該查詢可得到如表所示的新表。姓

名平均成績王

敏74李小琳82胡小平8803連接運(yùn)算連接運(yùn)算連接運(yùn)算(JOIN)是把兩個(gè)表中的行按照給定的條件進(jìn)行拼接,從而形成新表?!纠?.3】

若A表和B表分別如表所示。連接運(yùn)算條件為T1=T3,則連接運(yùn)算后的結(jié)果如表。T1T21A6F2BT3T4T513M20NA表B表T1T2T3T4T51A13M2B20N連接運(yùn)算數(shù)據(jù)庫應(yīng)用中常用的是“自然連接”運(yùn)算。它要求兩個(gè)表有共同屬性(列),自然連接運(yùn)算的結(jié)果表是在參與操作兩個(gè)表的共同屬性上進(jìn)行等值連接運(yùn)算后,再去除重復(fù)的屬性后所得的新表?!纠?.4】

若A表和B表分別如表所示。自然連接運(yùn)算后的新表C如表。T1T2T310A1B15A1C220D2C2T1T4T5T61100A1D11002B2C1200A2D1510A2C2A表B表T1T2T3T4T5T65A1C210A2C220D2C20A2D1C表第4章數(shù)據(jù)庫的查詢和視圖數(shù)據(jù)庫的查詢數(shù)據(jù)庫的查詢SQL的SELECT語句可以實(shí)現(xiàn)對(duì)表的選擇、投影及連接操作,其功能十分強(qiáng)大。SELECT語句比較復(fù)雜,其主要的子句語法格式為:SELECT列 /*指定要選擇的列及其限定*/ FROM表或視圖 /*FROM子句,指定表或視圖*/ [WHERE條件表達(dá)式] /*WHERE子句,指定查詢條件*/ [GROUPBY分組表達(dá)式] /*GROUPBY子句,指定分組表達(dá)式*/ [HAVING分組條件表達(dá)式] /*HAVING子句,指定分組統(tǒng)計(jì)條件*/ [ORDERBY排序表達(dá)式[ASC|DESC]] /*ORDER子句,指定排序表達(dá)式和順序*/01選

列1.選擇一個(gè)表中指定的列2.修改查詢結(jié)果中的列標(biāo)題3.計(jì)算列值4.消除結(jié)果集中的重復(fù)行選

列選擇表中列組成的結(jié)果表,語法格式為:SELECT[ALL|DISTINCT]列名列表其中,列名列表指出了結(jié)果的形式,其主要格式為:{* /*選擇當(dāng)前表或視圖的所有列*/ |{表名|視圖}.* /*選擇指定的表或視圖的所有列*/ |{列名|表達(dá)式} [[AS]列別名] /*選擇指定的列*/ |列標(biāo)題=列名表達(dá)式 /*選擇指定列并更改列標(biāo)題*/}[,…n]1.選擇一個(gè)表中指定的列使用SELECT語句選擇一個(gè)表中的某些列,各列名之間要以逗號(hào)分隔,其語法格式為:SELECT列名1[,列名2[,…n]] FROM表名 [WHERE條件表達(dá)式]選

列【例4.5】

查詢XSCJ數(shù)據(jù)庫的XSB表中各個(gè)學(xué)生的學(xué)號(hào)、姓名和總學(xué)分。在SQLDeveloper中myorcl連接的命令編輯區(qū)輸入語句如下:SELECT學(xué)號(hào),姓名,總學(xué)分 FROMxsb;將光標(biāo)定位到語句第一行,單擊“執(zhí)行”按鈕,結(jié)果如圖所示。執(zhí)行完后“結(jié)果”選項(xiàng)頁中將列出所有結(jié)果數(shù)據(jù)。選

列【例4.6】

查詢XSB表中總學(xué)分大于50分的學(xué)生的學(xué)號(hào)、姓名和總學(xué)分。SELECT學(xué)號(hào),姓名,總學(xué)分 FROMxsb WHERE總學(xué)分>50;執(zhí)行結(jié)果如圖?!纠?.7】

查詢XSB表中的所有列。SELECT* FROMxsb;該語句等價(jià)于:SELECT學(xué)號(hào)姓名,性別,出生時(shí)間,專業(yè),總學(xué)分,備注 FROMxsb;選

列2.修改查詢結(jié)果中的列標(biāo)題如果希望查詢結(jié)果中的某些列或所有列顯示時(shí)使用自己選擇的列標(biāo)題,可以在列名之后使用AS子句指定一個(gè)列別名來替代查詢結(jié)果的列標(biāo)題名?!纠?.8】

查詢XSB表中計(jì)算機(jī)專業(yè)學(xué)生的學(xué)號(hào)、姓名和總學(xué)分,將結(jié)果中各列的標(biāo)題分別指定為num、name和score。SELECT學(xué)號(hào)ASnum,姓名ASname,總學(xué)分ASscore FROMxsb WHERE專業(yè)='計(jì)算機(jī)';也可以省略AS關(guān)鍵字,寫成:SELECT學(xué)號(hào)num,姓名name,總學(xué)分score FROMxsb WHERE專業(yè)='計(jì)算機(jī)';執(zhí)行結(jié)果如圖。選

列3.計(jì)算列值使用SELECT對(duì)列進(jìn)行查詢時(shí),在結(jié)果中可以輸出對(duì)列值計(jì)算后的值,即SELECT語句可使用表達(dá)式作為結(jié)果,其格式為:SELECT表達(dá)式[,表達(dá)式]【例4.9】

創(chuàng)建產(chǎn)品CP表,其結(jié)構(gòu)如表。列

名數(shù)據(jù)類型是否允許為空值默

認(rèn)

值說

明產(chǎn)品編號(hào)char(8)×無主鍵產(chǎn)品名稱char(12)×無

價(jià)格number(8)×無

庫存量number(4)√無

列設(shè)CP表中已有如表所示的數(shù)據(jù)。產(chǎn)品編號(hào)產(chǎn)品名稱價(jià)

格庫

量10001100冰箱A_1001500.0050010002120冰箱A_2001850.0020020011001空調(diào)K_12002680.0030020012000空調(diào)K_21003200.00100030003001冰柜L_1505000.0010010001200冰箱B_2001600.0012001

溫馨提示

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