管理信息化ORACLEOracle 筆記_第1頁(yè)
管理信息化ORACLEOracle 筆記_第2頁(yè)
管理信息化ORACLEOracle 筆記_第3頁(yè)
管理信息化ORACLEOracle 筆記_第4頁(yè)
管理信息化ORACLEOracle 筆記_第5頁(yè)
已閱讀5頁(yè),還剩306頁(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)介

第四種方法:寫(xiě)成磁盤(pán)文件1.存儲(chǔ)大量數(shù)據(jù),方便檢索和訪問(wèn)2.保持?jǐn)?shù)據(jù)的一致、完整3.共享和安全4.通過(guò)組合分析,產(chǎn)生新的有用信息★使用磁盤(pán)文件儲(chǔ)存數(shù)據(jù)初級(jí)階段--第一代數(shù)據(jù)庫(kù)★出現(xiàn)了網(wǎng)狀模型、層次模型的數(shù)據(jù)庫(kù)★關(guān)系型數(shù)據(jù)庫(kù)和結(jié)構(gòu)化查詢語(yǔ)言★“關(guān)系-對(duì)象”型數(shù)據(jù)庫(kù)Oracle------甲骨文Sybase-------賽貝思實(shí)體(Entiy):客觀存在的、可以被描述的事物。如員工、部門(mén)屬性(Attribute):用于描述實(shí)體所具有的特征或特性,如使用編號(hào)、姓名、部門(mén)、工資等屬性員工的特征。關(guān)系(Relationship):實(shí)體之間的聯(lián)系。如部門(mén)和員工之間有一對(duì)多的關(guān)系。數(shù)據(jù)模型:也叫關(guān)系模型,是實(shí)體、屬性、關(guān)系在數(shù)據(jù)庫(kù)中的具體表現(xiàn)。行和列:行代表一個(gè)具體的實(shí)體數(shù)據(jù)。也叫一條記錄。課程目標(biāo):●Oracle安裝及配置●事物控制●索引視圖●存儲(chǔ)過(guò)程●觸發(fā)器●權(quán)限管理●數(shù)據(jù)庫(kù)的備份與恢復(fù)●數(shù)據(jù)庫(kù)設(shè)計(jì)Oracle的創(chuàng)始人是:LarryEllision創(chuàng)辦了Oracle公司。Oracle8i:Internet表示此時(shí)Oracle公司開(kāi)始開(kāi)始正式進(jìn)軍互聯(lián)網(wǎng).Oracle9i:Oracle8i和Oracle9i相比是非常相似的

Oracle是由甲骨文公司生產(chǎn)的以高級(jí)結(jié)構(gòu)化查詢語(yǔ)言(SQL)為基礎(chǔ)的大型關(guān)系數(shù)據(jù)庫(kù),通俗地講它是用方便邏輯管理的語(yǔ)言操縱大量有規(guī)律數(shù)據(jù)的集合。是目前最流行的客戶/服務(wù)

是目前市場(chǎng)占用率極高的一款數(shù)據(jù)庫(kù)產(chǎn)品特點(diǎn):◆提供了基于角色(ROLE)分工的安全保密管理。在數(shù)據(jù)庫(kù)管理功能、完整性檢查、安全性、一致性方面都有良好的表現(xiàn)?!糁С执罅慷嗝襟w數(shù)據(jù),如二進(jìn)制圖形、聲音、動(dòng)畫(huà)以及多維數(shù)據(jù)結(jié)構(gòu)等。◆提供了與第三代高級(jí)語(yǔ)言的接口◆提供了新的分布式數(shù)據(jù)庫(kù)能力。可通過(guò)網(wǎng)絡(luò)較方便地讀寫(xiě)遠(yuǎn)端數(shù)據(jù)庫(kù)里的數(shù)據(jù),并有對(duì)稱復(fù)制的技術(shù)。物理結(jié)構(gòu):和應(yīng)用程序的增大而變化。表空間內(nèi)存儲(chǔ)著各項(xiàng)應(yīng)用的數(shù)據(jù)、索引、程序等相關(guān)信息。監(jiān)聽(tīng)器服務(wù)。3.sqlplus工具sqlplus工具登錄數(shù)據(jù)庫(kù)有以下幾種方式:(1).sqlplus:以命令的方式進(jìn)入數(shù)據(jù)庫(kù)連接處輸入數(shù)據(jù)庫(kù)的名稱,如果不輸入,會(huì)進(jìn)行默認(rèn)的,一般默認(rèn)的是最后一個(gè)數(shù)據(jù)庫(kù)。那么登錄帳戶以后,就可以在數(shù)據(jù)庫(kù)中進(jìn)行增、刪、改、查等操作。補(bǔ)到了下一行。這樣看下來(lái)表就很混亂,不規(guī)范。所以我們要對(duì)其環(huán)境進(jìn)行一下設(shè)置。如設(shè)置每行顯示的長(zhǎng)度:setlinesize300;所我們可修改每頁(yè)顯示行數(shù)。4.命令我們通常使用的sqlplusw在sqlplusw下編輯代碼時(shí),出現(xiàn)了錯(cuò)誤,不允許我們使用向左方向鍵向右移動(dòng)到相應(yīng)的位1.Sqlplus用戶/密碼[as身份]sys:系統(tǒng)用戶名sys具有最大的權(quán)限。scott:它是一個(gè)oracle示例/學(xué)習(xí)帳戶3.停止和啟動(dòng)Oracle/是以操作系統(tǒng)認(rèn)證進(jìn)行登錄4.創(chuàng)建、刪除用戶△創(chuàng)建帳戶:MUNLIMITED----------------------->沒(méi)有限制如創(chuàng)建一個(gè)hellen的帳戶:createuserhellenidentifiedbyabcd;△刪除帳戶:如:刪除用戶hellen:dropuserhellen;△用戶修改密碼:如:alteruserhellenidentifiedbyabc123;△用戶解鎖:如:alteruserhellenaccountunlock;△查看當(dāng)前登錄用戶△查看系統(tǒng)有哪些用戶:如:△查看用戶的默認(rèn)表空間△查看用戶有哪些表空間△確定用戶帳戶所授予的權(quán)限select*fromDBA_tab_privs;直接授予用戶帳戶的對(duì)象權(quán)限select*fromDBA_role_privs;授如授予可以連接到數(shù)據(jù)庫(kù)的權(quán)限:granthellentoscott;connect(8)連上Oracle,做最基本操作resource(5)具有程序開(kāi)發(fā)最基本的權(quán)限exp-full-database可把數(shù)據(jù)庫(kù)整個(gè)備份輸出的權(quán)限基本語(yǔ)法:類(lèi)型很適合存儲(chǔ)純文本信息。儲(chǔ)圖片/文檔世紀(jì)中哪一年、月份、月中的哪一天、小時(shí)、分鐘和秒。(2)偽列可以從表中查詢,但不能插入、更新和刪除它們的值快速地定位表中的一行。例:一般讀作:[si:kju:]或者是字母SQL的發(fā)音。準(zhǔn),在實(shí)際中,各個(gè)數(shù)據(jù)庫(kù)就是提供的函數(shù)不同??刂普Z(yǔ)言。1.DDL(DataDefinitionLanguage)數(shù)據(jù)定義語(yǔ)言:定義數(shù)據(jù)庫(kù)對(duì)象(表(1)事務(wù)是最小的工作單元,作為一個(gè)整體進(jìn)行工作(2)保證事務(wù)的整體成功或失敗,稱為事務(wù)控制或rollback才認(rèn)為是結(jié)束了。如果要永久性的提交可以執(zhí)行:mit命令,再次打開(kāi)新的窗口時(shí)就可要回到原點(diǎn)了,也就是剛才所做的都等于沒(méi)做,所有rollback回退是將所有的回退。因?yàn)閞ollback回退是將所有的都回退了,這明顯不太好,那么我們可以設(shè)置幾個(gè)回退點(diǎn),使再次回退的時(shí)候,不讓其回退到原點(diǎn),而是回退到我們固定的位置上去。如:1.算術(shù)操作符:算術(shù)操作符包括加(+)、減(-)、乘(*)、除(/)。2.連接操作符用于將多個(gè)字符串或數(shù)據(jù)值合并成一個(gè)字符串例:要求查出雇員的編號(hào)、姓名、工作但是顯示的格式是:SELECT'編號(hào)是:'||empno||'的雇員,姓名是:'||ename||'工作是'||job;---->使用了連在查詢中也可以使用四則運(yùn)算功能。如我們要查每個(gè)雇員的姓名及年薪。例:4.邏輯操作符邏輯操作符用于組合多個(gè)計(jì)較運(yùn)算的結(jié)果以生成一個(gè)或真或假的結(jié)果。注二、在使用集合操作符時(shí),兩個(gè)表的類(lèi)型一定算術(shù)操作符--------最高優(yōu)先級(jí)OR邏輯操作符--------最低優(yōu)1.創(chuàng)建表空間基本語(yǔ)法:DATAFILE‘d:\’如:createtablespacejavasky-datafile'd:\'----->目錄地址size20M----------------------->大小為20M2.刪除表空間基本語(yǔ)法:注意表空間的名字需要使用雙引號(hào)包圍,并且表空間的名稱需要大寫(xiě)。3.查看表空間的名稱和狀態(tài)4.修改表空間的狀態(tài)altertablespace表空間名狀態(tài);可以修改表空間的狀態(tài)第一種、select*fromcat;第二種、select*fromtab;●建表如:createtablestudent(idint,namevarchar2(5),addressvarchar2(10));如deststudent;如名稱、類(lèi)型、是否為空。●修改表1.增加新列2.刪除舊列3.修改列類(lèi)型(要求,列中無(wú)數(shù)據(jù))4.修改列名5.修改表名●插入(記錄)數(shù)據(jù),也就是給列賦值1.給其相應(yīng)的字段賦值:INSERTINTO表名[(列名1,,,,)]VALUES(值1,,,);注:[]中的內(nèi)容2.賦全值INSERTINTOstudentVALUES(1,'李小龍','河北省');3.賦值以后查看該表的內(nèi)容:select*fromstudent;4.插入日期格式的值:●修改記錄●刪除(記錄)數(shù)據(jù)●利用現(xiàn)有的表創(chuàng)建表語(yǔ)法:如:為空??苫貪L。function_name(columnleexpression,[arg1,arg2.....])expression:字符串或計(jì)算表達(dá)式arg1,arg2:函數(shù)中使用的參數(shù)日期運(yùn)算:-------------------------------------------------------------------------------Initcap(char):將首字母轉(zhuǎn)換為大寫(xiě)eg:Selectinitcap('hello')fromdual;------->HelloLtrim(char,set):從左邊開(kāi)始截取字符(一般用來(lái)截取空格)Trim():從兩端截取Rtrim(char,set):從右邊開(kāi)始截取字符(右截空格)Translate(char,from,to):替換單個(gè)字符4eg:Selecttranslate(‘jack’,’j’,’b’)fromdual;------->backReplace(char,searchstring,[repstring]):替換多個(gè)字符eg:Selectreplace(‘jackandjue’,’j’,’bl’)fromdual;------->blackandblueInstr(char,m,n):返回一個(gè)數(shù)值型,標(biāo)識(shí)截取的字符的位置,從1開(kāi)始計(jì),第一次出現(xiàn)的eg:Selectinstr(‘worldwide’,’d’)fromdual;------->5eg:Selectsubstr(‘a(chǎn)bcdefg’,3,2)frC-----C*******abc-----------------------------SQL>SELECTDECODE(id,1,'tom',2,'jack',------jackhellen5.數(shù)字函數(shù)Selectabs(-15)fromdual;Ceil(n)Selectceil(44.778)fromdual;-.Selectcosh(0)fromdual;1Floor(n)Selectfloor(100.2)fromdual;1Selecttrunc(100.256,2)fromdual;Sqrt(n)Selectsqrt(4)fromdual;20Sign(n)Selectsign(-30)fromdual;6.轉(zhuǎn)換函數(shù)-------------●為表增加約束●設(shè)置表所在的表空間●使用序列實(shí)現(xiàn)自動(dòng)增長(zhǎng)約束是在表上強(qiáng)制執(zhí)行的一些數(shù)據(jù)校驗(yàn)規(guī)則,被插入/修改/刪除的數(shù)據(jù)必須符合在相關(guān)字段語(yǔ)法:列定義......推薦采用:表名_列名_約束類(lèi)型簡(jiǎn)寫(xiě)(1)該列的值不能為空(2)列級(jí)約束(2)列級(jí)約束、表級(jí)約束(3)取名:表名_列名_uk如:名字不能為空且唯一));如果是先創(chuàng)建了表來(lái)要增加約束可以寫(xiě)成:(1)用來(lái)唯一標(biāo)識(shí)這一行記錄,一個(gè)表中只能有一個(gè)主鍵(2)功能上相當(dāng)于非空且唯一(3)列給約束、表級(jí)約束(4)取名:表名_列名_pkcreatetabledepts(idintprimarykey,---->將id設(shè)置為主鍵descriptionvarchar(100));(5)主鍵有一個(gè)最主要的作用是:當(dāng)兩個(gè)表關(guān)聯(lián)時(shí),主外鍵時(shí),要求引用的主表中的字段一定要為主鍵。(1)用于兩表間建立關(guān)系,需要指定引用主表的那列(2)列級(jí)約束表級(jí)約束(3)命名:主表名_子表名_FK(4)語(yǔ)法:--部門(mén)表注表createtabledepts(dept_idintprimarykey,descriptionvarchar(20));--員工表子表addressvarchar(20),dept_idint,foreignkey(dept_id)referencesdepts(dept_id)--主鍵);語(yǔ)法:例:referencesdepts(depts_id);表中被使用,則不允許修改此主鍵值。除。例:3foreignkey(dept_id)4referencesdepts(dept_i5ondeletesetnull;--->刪除后設(shè)置為空不存在了,該記錄的引用就就變?yōu)榭樟恕?1)對(duì)某列的值進(jìn)行范圍限制、格式限制等(2)列級(jí)約束、表級(jí)約束(3)取名:表名_列名_ck例:2idintprimarykey,5);6.刪除約束如:刪除sal上的約束例:名稱是否為空?類(lèi)型7.指定表空間如:descuser_tablespace;----->查看所有的表空間createtablestudent(idint)tablespacesystem;8.創(chuàng)建序列創(chuàng)建語(yǔ)法:從序列中取值:Select序列名.nextvalfromdual;--nextval序列中的下一個(gè)值如創(chuàng)建一個(gè)序列:2startwith11----------1currval不論執(zhí)行多少次都是1.往部門(mén)表中插:insertintodeptsvalues(seq_,"財(cái)務(wù)部");SELECTselection_list1.查詢所有記錄的所有列2.查詢特定行3.查詢特定列4.去掉重復(fù)的值5.給列取別名SELECT列名....1.除了張三以外的所有員工:4.有獎(jiǎng)金的5.所有姓張的6.姓張的且名字是3個(gè)字的。7.在2008.1.1入職的女員工SELECT列名....例:desc;四、在Oracel用“||”表示字符串的連接。如實(shí)現(xiàn)如下查詢:要求查出雇員的編號(hào)、姓名、工作但是顯示的格式是:SELECT'編號(hào)是:'||empno||'的雇員,姓名是:'||ename||'工作是'||job;在查詢中也可以使用四則運(yùn)算功能。如我們要查每個(gè)雇員的姓名及年薪。但是在查詢的結(jié)果中是以sal*12的字段顯示的,這樣的看起來(lái)讓人不太明白,不知道到底●多表連接查詢1.使用單個(gè)SELECT語(yǔ)句從多個(gè)表中取出多個(gè)相關(guān)的數(shù)據(jù),通數(shù)據(jù)的查詢。2.多表連接通常是建立在相互關(guān)系的父子表上的。-------------------------------------join_table:參與連接的表join_condition:連接條件●內(nèi)連接1.語(yǔ)法selecta.id,,c.scorefromainnerjoinbona.id=b.idinnerjoinconc.id=b.id[where];2.只列出這些連接表中與連接條件相匹配的數(shù)據(jù)行如:=非等值連接:在連接條件中使用除了等號(hào)運(yùn)算符以外其它比較運(yùn)算符來(lái)比較被連接的列值.自連接:在連接條件中使用等號(hào)(=)運(yùn)算符來(lái)比較被連接列的列值,但他使用選擇列表指出如果表的名字很長(zhǎng),可以給其起一個(gè)別名如:還可以寫(xiě)成:fulljoindept●記錄聯(lián)合運(yùn)算,刪除重復(fù)的記錄再返回結(jié)果?!褡硬樵冎械膇n和exists表A表Bexists需要把表進(jìn)行關(guān)聯(lián),in不一定需要。如何選擇in還是exsits?作用在子查詢上使用exists。在數(shù)據(jù)量較大時(shí),exists的效率高于in.2.分組統(tǒng)計(jì)級(jí)統(tǒng)計(jì)函數(shù)的使用3.子查詢,并結(jié)合多表查詢,分組統(tǒng)計(jì)做復(fù)雜查詢4.數(shù)據(jù)庫(kù)的更新操作5.數(shù)據(jù)庫(kù)的更新操作6.事務(wù)處理及數(shù)據(jù)庫(kù)死鎖之前在查詢的時(shí)候都是在一張表中查詢,那么在一張表以上的查詢就叫做多表查詢。基本語(yǔ)法:發(fā)中不介意過(guò)多的使用的。要想去掉笛卡爾積,必須使用字段進(jìn)行關(guān)聯(lián)的操作。范例:修改之前的查詢操作:此時(shí)只有14行記錄了,消除掉了笛卡爾積。此時(shí)又存在了一個(gè)新的問(wèn)題,那么現(xiàn)在表名稱所以要使用多表查詢的時(shí)候,最好指定別名。范例:要求查詢出雇員的編號(hào)、雇員的姓名、部門(mén)的編號(hào)、部范例:要求查詢每個(gè)雇員的姓名、工作、雇范例:進(jìn)上步擴(kuò)展之前的程序,將雇員的所現(xiàn)在要求查詢每個(gè)雇員的姓名、工資、部門(mén)名稱,工資在公司的等級(jí)(salgrade),及其領(lǐng)先查詢工資表的內(nèi)容(salgrade)0--------------------------1.查每個(gè)雇員的姓名、工資、部門(mén)名稱,工資在公司的等級(jí)(salgrade需要三張表進(jìn)行selecte.ename,e.sal,d.dname2.此時(shí)雇員的工資等級(jí)已經(jīng)求出,現(xiàn)在再求其領(lǐng)導(dǎo)的姓名及工資所在公司的等級(jí)。2.第四等級(jí)工資3.第三等級(jí)工資4.第二等級(jí)工資5.第一等級(jí)工資selecte.ename,e.sal,d.dname,DECODE(s.grade,1,'第五等工資',2,'第四等工資',3,'第三等工資',4,'第二等工資',5,'第一等工資'),DECODE(,1,'第五等工資',2,'第四等工資',3,'第三等工資',4,'第二等工資',5,'第一等工資').............部分已省略們添加一個(gè)(+)符號(hào)...............部分已省略..............部分已省略因?yàn)榘?+)放在等號(hào)右邊的時(shí)候沒(méi)有變化,跟不加一樣,所以默認(rèn)是左連接。左右連接了。..............部分已省略--------------------------------------------------------------------------..............部分已省略子查詢:在一個(gè)查詢內(nèi)部還包括另外一個(gè)查詢,則稱為子查詢。SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..(SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..)別名(SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..)}1.單列子查詢:返回的結(jié)果是一列的一個(gè)內(nèi)容2.單行子查詢:返回多個(gè)列,有可能是一個(gè)完整的記錄一般在程序開(kāi)發(fā)中單列子查詢是用的最多的。范例:要求查詢出:部門(mén)的名稱、部門(mén)的員工數(shù)、部門(mén)的平均工資、部門(mén)的最低收入雇員的姓名。進(jìn)行分組。如果此時(shí)在一個(gè)部門(mén)之中同時(shí)出現(xiàn)兩個(gè)雇員的工資是最低的,那么這個(gè)程序是錯(cuò)誤的。對(duì)于子查詢來(lái)講,還可以進(jìn)行多列子查詢,一個(gè)子查詢中同時(shí)可以返回多個(gè)查詢的列。分組:如將男生分為一組女生分為一組。如果想求出每一組的平均身高、平均年齡,這就是使用到分組函數(shù)。-------------------SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..要分組時(shí)要注意:在查詢的時(shí)候,以上的代碼不能正確的執(zhí)行是因?yàn)椋?.如果程序中使用了分組函數(shù),則有兩種可以使用的情況:(2)如果不使用分組的話,則只能單獨(dú)的使用分組函數(shù)。2.在使用分組函數(shù)時(shí),不能出現(xiàn)分組函數(shù)和分組條件之外的字段。范例:按部門(mén)分組,并顯示部門(mén)的名稱及部門(mén)的員工數(shù)。錯(cuò)誤的代碼:二種條件的指令:SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..分組的簡(jiǎn)單原則:只要一列上存在重復(fù)的內(nèi)容才有可能考慮到分組。錯(cuò)誤的代碼:正確的代碼:5.理解數(shù)據(jù)庫(kù)的設(shè)計(jì)范式視圖的功能:一個(gè)視圖實(shí)際上就是封裝了一個(gè)復(fù)雜的子查詢。創(chuàng)建視圖的語(yǔ)法:建立一個(gè)視圖,此視圖包含了全部的20部門(mén)的雇員信息(雇員姓名、編號(hào)、工作、雇傭日期)。視圖在創(chuàng)建完成之后,我們就可以像查找表一樣直接對(duì)視圖進(jìn)行查詢操作。此時(shí)是通過(guò)視圖找到20部門(mén)的全部信息,也就是可以發(fā)現(xiàn),可以使用視圖包裝需要的的查加一個(gè)sal字段。結(jié)果:名稱已由現(xiàn)有對(duì)象使用說(shuō)明視圖是無(wú)法重名的。此時(shí)只能先刪除后重新建立。但是如果所有的操作都是這樣操作很麻煩。因?yàn)槿绻胄薷囊晥D必須先刪除視圖,在作用以上的語(yǔ)法,在更改視圖之前就不用再刪除重建了。所以視圖的作用:可以封裝復(fù)雜的查詢,那么下面封裝一個(gè)已經(jīng)存在的復(fù)雜查詢。如這是一個(gè)復(fù)雜的子查詢:便使用。如:結(jié)果是一樣的。理論上是不允許修改的。----------------------------------------------------------------------------------------------------------------------------------................部分已省略說(shuō)明創(chuàng)建條件再更改,那么其它字段呢,現(xiàn)在將7369的雇員姓名修改為“hellen”-----------------------------------------------------------------------------------------------------------------------------------------------...............部分已省略數(shù)視圖無(wú)法更改,是只讀的操作。在很多數(shù)據(jù)庫(kù)系統(tǒng)中存在一個(gè)自動(dòng)增長(zhǎng)的列,如果現(xiàn)在要想在Oracle中完成自動(dòng)增長(zhǎng)的功能,則只能依靠序列完成,所有的自動(dòng)增長(zhǎng)操作,需要用戶手工完成處理。序列的創(chuàng)建格式:作,)------------->表已創(chuàng)建向表中添加數(shù)據(jù),添加數(shù)據(jù)的時(shí)候,需要手工......-----------------------------從結(jié)果中可以發(fā)現(xiàn),nextval始終在進(jìn)行自動(dòng)增長(zhǎng)的操作,而currval使用取出當(dāng)前操作的序列結(jié)果。進(jìn)行數(shù)據(jù)插入操作。99------->每次增長(zhǎng)的幅度是2其結(jié)果為:-------------------------數(shù)據(jù)庫(kù)的對(duì)象包括:同義詞、序列、視圖、索引。之前一直存在這樣的查詢語(yǔ)句:-----------------------------------------------是用戶.表名。如:select*from;表名稱”如:select*fromdual代替了select*from;詞之后就可以了。2.創(chuàng)建同義詞2.隱藏對(duì)象的名稱和所有者3.提供對(duì)對(duì)象的公共訪問(wèn)1.私有同義詞只能在其模式內(nèi)訪問(wèn),且不能與當(dāng)前模式的對(duì)象同名。(這三、創(chuàng)建或替換現(xiàn)有的同義詞:叉樹(shù))?!袼饕桥c表相關(guān)的一個(gè)可選結(jié)構(gòu)2.減少磁盤(pán)I/O4.在邏輯上和物理上都獨(dú)立于表的數(shù)據(jù)●索引有各種類(lèi)型,除了標(biāo)準(zhǔn)索引外,還有一些特殊類(lèi)型的索引:唯一索引、位圖索引、組合索引、基于函數(shù)的索引、反向鍵索引。●創(chuàng)建標(biāo)準(zhǔn)索引:●唯一索引的值是不能得復(fù)的,我們?cè)趧?chuàng)建主鍵時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)唯一索引。所以表中如果有主鍵了,就不用去創(chuàng)建唯一索引了?!窠M合索引組合索引是在表的多個(gè)列上創(chuàng)建的索引。就像我們?cè)趧?chuàng)建主鍵時(shí),可以多列的進(jìn)行創(chuàng)建。ONitemfile(p_category,itemrate);●反向鍵索引如:將個(gè)反射鍵索引恢復(fù)成正常索引:注:但是普●位圖索引:Oracle位圖索引主要是應(yīng)用在數(shù)據(jù)倉(cāng)庫(kù)方面,其目的是查詢效率更高,占用更小的索引空間,使用存儲(chǔ)更有效,位圖索引使用壓縮形式存儲(chǔ)使用位圖索引的注意事項(xiàng):位圖索引應(yīng)該建立在每一個(gè)事實(shí)表的外鍵列上。(這只是一個(gè)一般的規(guī)則.)位圖索引適用在低基數(shù)列上(大量重復(fù)數(shù)據(jù))●索引的創(chuàng)建原則一個(gè)表允許創(chuàng)建幾百個(gè)索引,通常我們都不會(huì)這樣做,因?yàn)樗饕岣吡瞬樵冃?同時(shí)也給如果某幾個(gè)字段經(jīng)常一起出來(lái)做為條件,則創(chuàng)建多列索引(組合索引)。頻繁更新?!窬鄞厮饕樞驘o(wú)關(guān),葉節(jié)點(diǎn)仍然是索引節(jié)點(diǎn),只不過(guò)有一個(gè)指針指向?qū)?yīng)的數(shù)據(jù)塊。聚簇索引一般用于表的聯(lián)接字段,比如,部門(mén)表的部門(mén)編號(hào)與員工表的所屬部門(mén),創(chuàng)建聚簇索引要先創(chuàng)建聚簇,然后把表的字段放置到簇中接查詢速度。創(chuàng)建一個(gè)簇表:●索引組織表)普通表與索引組織表的比較:●基于函數(shù)的索引●獲取索引的信息●使用索引●數(shù)據(jù)庫(kù)對(duì)象總結(jié):如果其它的服務(wù)齊全,我們可以后添加一個(gè)監(jiān)聽(tīng)?!馩racle查詢工具●Oracle默認(rèn)用戶●更改和刪除用戶該服務(wù)啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器的監(jiān)聽(tīng)器,監(jiān)聽(tīng)器接受來(lái)))以上操作是最通用的操作,而且本身也是屬于最正確的操作,但是是在O字段的類(lèi)型,所在嵌套表本身也需要同樣指定類(lèi)型,那么這種類(lèi)型就需要單獨(dú)定義。);/為此類(lèi)型指定一個(gè)名稱。/projectsproject_nt對(duì)于插入數(shù)據(jù)來(lái)講,需要需要指定每一個(gè)project_ty的類(lèi)型。project_nt(project_ty(0002,'ERP',SYSDATE),//ERP為項(xiàng)目));此時(shí)查詢嵌套表,可以返回多個(gè)項(xiàng)目。如果此時(shí)需要查詢一個(gè)部門(mén)的全部項(xiàng)目的話,則需要查詢嵌套表。--------------------------------------------------------------------------可見(jiàn)將一個(gè)部門(mén)中的統(tǒng)一的全部項(xiàng)目查詢出來(lái)了。二、可變數(shù)組(了解)行了限制。例如:1.在一個(gè)部門(mén)有多個(gè)工人,如果按照可變數(shù)組的做法,肯定首先要做出一個(gè)工人的類(lèi)型。5)類(lèi)型已創(chuàng)建。2.面再定義數(shù)組類(lèi)型:worker_info_list類(lèi)型已創(chuàng)建。3.定義部門(mén)表,一個(gè)部門(mén)可能存在多個(gè)工人4workersworker_info_list5);表已創(chuàng)建。4.插入測(cè)試數(shù)據(jù)2worker_info_list(3worker_info(1,'李小龍','男'),4worker_info(2,'張三','男'),5worker_info(3,'李君','女')6)7);-----------------------------------------------------------------------------------------------以上是基礎(chǔ),以下是高級(jí)對(duì)象PL/SQL游標(biāo)的使用-----------子程序達(dá)到功能更復(fù)雜的一些操作。完成了操作。比如什么時(shí)候插值,什么時(shí)候修改,可以有條件來(lái)限定了。如給一個(gè)班級(jí)的每個(gè)人都提10分,就可以用循環(huán)為完成操作。性。到服務(wù)器端編譯執(zhí)行,然后返回給客戶端一個(gè)請(qǐng)求結(jié)果,語(yǔ)句得逐個(gè)一條一條的進(jìn)行編譯,個(gè)人只需調(diào)用一次就可以了。所以這一點(diǎn)就可以節(jié)約帶寬,減少了網(wǎng)絡(luò)流通量。不同的代碼發(fā)給不同的引擎,當(dāng)處理完之后,會(huì)給服務(wù)器一個(gè)集中,將結(jié)果返回給客戶端。這是整個(gè)過(guò)程。5.安全性,可以通過(guò)存儲(chǔ)過(guò)程限制用戶對(duì)數(shù)據(jù)的訪問(wèn)。如我們寫(xiě)了一個(gè)存儲(chǔ)過(guò)程,這里邊可可以,至于里邊操作的是那一個(gè)表,對(duì)那個(gè)表執(zhí)行了什么操作,不必知道。該引擎接受PL/SQL塊并對(duì)其進(jìn)行編譯執(zhí)行。用戶發(fā)出請(qǐng)求時(shí)候是一個(gè)他的執(zhí)行完之后,Oracle服務(wù)器把結(jié)果合成declarations]----------------------------------------可執(zhí)行部分handlers]例:--------------------------------------------------上:聲明部分--------------------------------------------------下:主體部分(包括可執(zhí)行部分和異常部分)----------------------------------------上:可執(zhí)行部分----------------------------------------下:異常部分如:...icode:='i205';---第一種賦值SELECTp_category,itemrate...90----結(jié)果5DBMSLINE('員工工資為:'||v_sal);1.Natural(0-231)(非負(fù)及null)2.Positive(1-231)(正數(shù)和null)3.NaturalN(非空及非負(fù))4.positiveN(正數(shù)和非null)5.signtype(要將整型變量限制為值-1,0,1)1,2,3,4用于防止將空值賦予整型變量。用于聲明最高精度為38位十進(jìn)制數(shù)字的定點(diǎn)數(shù)。定點(diǎn)數(shù)量用定點(diǎn)數(shù)。位十進(jìn)制數(shù)字)浮點(diǎn)數(shù).子類(lèi)型:real:用于聲明最高精度為63個(gè)二進(jìn)制位(大約相當(dāng)于18位十進(jìn)制數(shù)字)浮點(diǎn)數(shù)。此數(shù)據(jù)類(lèi)型用于存儲(chǔ)帶符號(hào)的整數(shù)。從上可以看出同一類(lèi)型可以出現(xiàn)放不下的可能,所有用的時(shí)候有注意。大對(duì)象數(shù)據(jù)類(lèi)型主要用于存儲(chǔ)大文本、圖像、視頻剪輯和聲音剪輯等非結(jié)構(gòu)化數(shù)據(jù)。型6DBMSLINE('員工號(hào)為:'||v_rec_||'員工名為:'||v_rec_);使用屬性類(lèi)型的優(yōu)點(diǎn):息。......3(-----------不能用’-‘(減號(hào));注意:一般不要把變量名聲明與表中字段名完全一樣,如果這樣可能得到不正確的結(jié)果.IF語(yǔ)句循環(huán)控制:順序控制:createtabletoys(idintprimarykey,toynamevarchar2(2),toypricenumber);insertintotoysvalues(1,'a',200);insertintotoysvalues(2,'b',100);insertintotoysvalues(3,'c',90);----------------------11endif;7id=v_id;13endif;原值5:v_id:=&id;新值5:v_id:=2;原值5:v_id:=&id;新值5:v_id:=3;--帶引號(hào)8ELSEDBMSLINE('沒(méi)有此成績(jī)')也可以寫(xiě)成:新值4:grade:='A';循環(huán)控制語(yǔ)句包括:循環(huán)控制的三種類(lèi)型:范例:5exit;7endif;8daily_value:=daily_value+10;9dbmsline('每日銷(xiāo)量:'||daily_value);11dbmsline('每月銷(xiāo)量:'||monthly_valu2iint:=0;5dbmsline(i);6i:=i+1;9foriin1..10loopdbmsline(i);foriinreverse1..100loopdbmsline(i);4.順序結(jié)構(gòu)順序控制語(yǔ)句包括:例:relevel_level%type;[INTOdefine_variable_list]2executeimmediate'createtabletest(idint)';--->語(yǔ)句放在單引號(hào)中,2sql_stmtvarchar2(200);就是Oracle系統(tǒng)根據(jù)用戶經(jīng)常出現(xiàn)的錯(cuò)誤,預(yù)先定義出來(lái)的一些異常。如返回多行時(shí),就會(huì)觸發(fā)一個(gè)預(yù)定義異常。7dbmsline('返回太多行');如果不加異常處理部分:4selectsalintov_fromemp;--不定義異常,直接*7dbmsline('無(wú)符合條件的數(shù)據(jù)');處理用戶定義異常需要三步:2e_testexception;--聲明異常e_test6ifv_namenotin('a','b','c')then7raisee_test;--引發(fā)異常8endif;9--處理異常12dbmsline('輸入的信息不在規(guī)定的范圍內(nèi)');新值5:v_name:='a';新值5:v_name:='e';2e_testexception;--聲明異常6ifv_namenotin('a','b','c')then7raisee_test;--引發(fā)異常8endif;9--處理異常12raise_application_error(-20001,'輸入的信息不在規(guī)定的范圍內(nèi)');--產(chǎn)生錯(cuò)誤的時(shí)候,同時(shí)生成一個(gè)號(hào),類(lèi)似于預(yù)定義錯(cuò)誤。新值5:v_name:='/';*●執(zhí)行原理:行●作用:逐行處理查詢結(jié)果,以編程的方式訪問(wèn)數(shù)據(jù)查詢的結(jié)果)樣。將結(jié)果存到內(nèi)存區(qū)域里邊,然后Oracle提供了一種機(jī)制,游標(biāo)就像一個(gè)指針一樣,可以指定他的記錄,第一次指向第一條,一直往下,直到結(jié)束。6dbmsline('已更新');7endif;已更新----打印出來(lái)了,說(shuō)明更新,是真6dbmsline('沒(méi)有更新');7else8dbmsline('已更新');9endif;6dbmsline('沒(méi)有相關(guān)更新');7else9endif;6dbmsline('沒(méi)有相關(guān)更新');7else10dbmsline('游標(biāo)已打開(kāi)');12dbmsline('游標(biāo)已關(guān)');--始終都是關(guān)著的13endif;14endif;顯式游標(biāo)(重點(diǎn))查詢,用的最多?;静骄?聲明游標(biāo)打開(kāi)游標(biāo)提取關(guān)閉1.帶參數(shù)的顯式游標(biāo)ISselect_statement;----------------------------------------------------------------------3--注:定義參數(shù)時(shí),只需要給定一個(gè)類(lèi)型就可以了,不用給定8fetchtoy_curintoa;--提取10dbmsline('玩具名:'||a.toyname||'價(jià)格為:'||a.toyprice);12closetoy_cur;--關(guān)閉原值6:opentoy_cur(&price);--需要輸入的值新值6:opentoy_cur(100);--需要輸入的值玩具名:f價(jià)格為:600-------------------------------->很明顯帶有參數(shù)的游標(biāo)要給不帶參的靈活。其>100元2.使用顯式游標(biāo)更新行--創(chuàng)建游標(biāo)select*fromtoys;dbmsline('符合要求的有:'||'玩具名'||toys_||'價(jià)格為'||toys_);符合要求的有:玩具名c價(jià)格為90select*fromtoys;-----------------select*fromtoys;dbmsline('符合要求的有:'||toys_);select*fromtoys;------------------3.循環(huán)游標(biāo)循環(huán)游標(biāo)的語(yǔ)法如下:--toy_rectoys%rowtype;--toy_rec變量在此處定義可不定義,就像if語(yǔ)句中的i變量,不cursortoy_curisselect*fromtoys;fortoy_recintoy_curdbmsline(toy_||toy_||toy_);--closetoy_cur;注:同理不用關(guān)閉●REF游標(biāo)和游標(biāo)變量執(zhí)行時(shí)給游標(biāo)設(shè)定一個(gè)查詢。使用的頻率很少。主要是以游標(biāo)變量的形式進(jìn)行操作的。創(chuàng)建游標(biāo)變量需要兩個(gè)步驟:--------------------------------------REF游標(biāo)分為兩種類(lèi)型:弱類(lèi)型和強(qiáng)類(lèi)型。它們的區(qū)別差一個(gè)弱類(lèi)型游標(biāo)不能放入包中。2typeref_toy_curisrefcursor--聲明一個(gè)REF游標(biāo)5cur_toyref_toy_cur;--聲明一個(gè)REF類(lèi)型的變量9fetchcur_toyintov_rec;13closecur_toy;a4curc_type;9orderbysaldesc'--排序11DBMSLINE('薪水大于'||p_salary||'的員工有:');16||'姓名:'||r_||'薪水:'||r_);●游標(biāo)變量的優(yōu)點(diǎn)和限制游標(biāo)變量的功能強(qiáng)大,可以簡(jiǎn)化數(shù)據(jù)處理。(2)可以作為過(guò)程的參數(shù)進(jìn)行傳遞(3)可以引用游標(biāo)的所有屬性(4)可以進(jìn)行賦值運(yùn)算(1)不能在程序包中聲明游標(biāo)變量(3)不能使用比較運(yùn)算符來(lái)使用,我們叫這個(gè)為匿名塊,沒(méi)名字。子程序的各個(gè)部分:聲明部分、可執(zhí)行部分、異常處理部分(可選)子程序的分類(lèi):1.過(guò)程-執(zhí)行某些操作2.函數(shù)-執(zhí)行操作并返回值●子程序-過(guò)程過(guò)程是用于完成特定任務(wù)的子程序。創(chuàng)建過(guò)程的語(yǔ)法:IS|AS--選一個(gè),兩個(gè)意義是一樣的<localvariabledeclaration>--本過(guò)程要使用的變量9dbmsline('沒(méi)有此人:');過(guò)程已創(chuàng)建。執(zhí)行過(guò)程的語(yǔ)法:10endif;過(guò)程已創(chuàng)建。--調(diào)用子程序過(guò)程5dbmsline('工資標(biāo)準(zhǔn):'||v_sal);7x:=y;過(guò)程已創(chuàng)建。--調(diào)用參數(shù)5swap(a,b);將過(guò)程的執(zhí)行權(quán)限授予其他用戶:創(chuàng)建函數(shù)的語(yǔ)法:[localdeclarations]創(chuàng)建函數(shù):IS/注:函數(shù)是不能單獨(dú)存在的,要跟其它部分共同構(gòu)9return'工資在范圍內(nèi)';11return'不在范圍內(nèi)';12endif;-----------------------------------------------●調(diào)用自定義函數(shù)位置表示法functionName(arg1[,混合表示法:同時(shí)使用位置表示法和名稱表示法為函數(shù)傳遞參數(shù)。名稱表示法。調(diào)用get_salary函數(shù)11dbmsline('沒(méi)有選定的信息');13dbmsline('錯(cuò)誤代號(hào)'||sqlcode);--調(diào)用函數(shù)6dbmsline('工資總和為:'||v_sum||'人員個(gè)數(shù)為:'||v_count);--按名稱調(diào)用--混合調(diào)用●創(chuàng)建參數(shù)帶有默認(rèn)值的函數(shù)2fun_def(namevarchar2,ageint,sexvarchar2default'男5v_resultvarchar2(50);7v_result:='姓名:'||name||'年齡:'||age||'性別:'||sex;8returnv_result;2v_resultvarchar2(50);4--v_result:=fun_def('李龍',20);6dbmsline(v_result);姓名:杰克年齡:23性別:男--------默認(rèn)為男也可以加上性別:2v_resultvarchar2(50);5dbmsline(v_result);姓名:多莉年齡:23性別:女●過(guò)程和函數(shù)的比較:2is3v_locvarchar2(30);6dbmsline(v_loc);7rollback;--注:回滾過(guò)程已創(chuàng)建。2is3v_locvarchar2(20);2is6first();--在第2個(gè)過(guò)程中調(diào)用第1個(gè)過(guò)程8dbmsline(v_loc);過(guò)程已創(chuàng)建。之所以改動(dòng)后的值沒(méi)有被保留,是因?yàn)樵趂irst中有一個(gè)rollback;2is3v_locvarchar2(30);7dbmsline(v_loc);8rollback;過(guò)程已創(chuàng)建。3v_locvarchar2(20);6first();8dbmsline(v_loc);過(guò)程已創(chuàng)建。主事(first)務(wù)處理啟動(dòng)獨(dú)立事務(wù)處理1.與主事務(wù)處理的狀態(tài)無(wú)關(guān)2.提交或回滾操作不影響主事務(wù)處理4.能夠啟動(dòng)其他自主事務(wù)處理程序包是對(duì)相關(guān)過(guò)程、函數(shù)、變量、游標(biāo)和異常等對(duì)象的封裝。程序包由規(guī)范和主體兩部分組成。在規(guī)范中可以聲明:包括類(lèi)型、變量、常量、異常、游標(biāo)規(guī)在主體中可以聲明:對(duì)象和實(shí)現(xiàn)在包規(guī)范中聲明●創(chuàng)建程序包1.程序包規(guī)范IS|AS[Publicitemdeclarations]2.程序包主體IS|AS[Privateitemdeclarations]Initialization]4--過(guò)程及函數(shù)的規(guī)格聲明5--實(shí)現(xiàn)創(chuàng)建一個(gè)過(guò)程8functionfun_firstreturnvarchar2;--函數(shù)程序包已創(chuàng)建。●程序包的優(yōu)點(diǎn):模塊化、更輕松的應(yīng)用程序設(shè)計(jì)、信息隱藏、新增功能、性能更佳●程序包中的游標(biāo):在包中聲明游標(biāo)的要求:2.程序員定義的記錄類(lèi)型創(chuàng)建游標(biāo)程序包范例:程序包已創(chuàng)建。15dbmsline('名為:'||v_rec_||'工資:'||v_rec_);程序包體已創(chuàng)建。--調(diào)用包中的過(guò)程●有關(guān)子程序和程序包的信息●總結(jié):程序包是對(duì)相關(guān)類(lèi)型、變量、常量、游標(biāo)、使用程序包的優(yōu)點(diǎn)是:模塊化、更輕松的程序設(shè)計(jì)、信息隱藏觸發(fā)器的功能:3.提供審計(jì)和日志記錄(在我的數(shù)據(jù)庫(kù)執(zhí)行了什么樣的操作都可以記錄下來(lái))4.啟用復(fù)雜的業(yè)務(wù)邏輯(是與多個(gè)表相關(guān)的如:從一個(gè)員工辭職了,其中的一個(gè)表中刪除了所以觸發(fā)器是數(shù)據(jù)庫(kù)的高級(jí)使用。●觸發(fā)器的組成部分觸發(fā)器由三部分組成:):2.觸發(fā)器限制:執(zhí)行觸發(fā)器的條件,該條件必須為真才能激活觸發(fā)器3.觸發(fā)器操作(主體):有觸發(fā)器的條件為真是,觸發(fā)器的主體才會(huì)運(yùn)行。后操作表,如果是多后,先操作表,后執(zhí)行觸發(fā)器的主體。每一個(gè)符合條件的行,他都會(huì)去執(zhí)行,常用的是行級(jí)。單獨(dú)執(zhí)行一次。觸發(fā)器最常用的對(duì)象是表。●創(chuàng)建觸發(fā)器語(yǔ)法trigger_body;語(yǔ)法分析:●每張表最多可建立12種類(lèi)型的觸發(fā)器,它們是:如果12個(gè)都創(chuàng)建時(shí)容易落入一個(gè)災(zāi)難,因?yàn)閯?chuàng)建以后,只要一符合條件就會(huì)自動(dòng)觸發(fā),有可能產(chǎn)生遞歸,所以觸發(fā)器要適量而止。觸發(fā)器的執(zhí)行順序:●觸發(fā)器的限制:觸發(fā)器被激活時(shí)的特殊對(duì)象:觸發(fā)器的發(fā)、創(chuàng)建:為salary_records表創(chuàng)建trig-sal觸發(fā)器●觸發(fā)器的類(lèi)型有:●觸發(fā)器的組成部分示例例1:為salary_records表創(chuàng)建trig-sal觸發(fā)器…操作:sal_diff:=:-:;DBMSLINE(‘工資差額:’sal_diff);●工作原理:●總結(jié):createorreplacetriggertrigafterinsert--頻率--主體if(:=0)thendbmsline('有一個(gè)玩具的價(jià)格為0');endif;--插入一條數(shù)據(jù)啟動(dòng)觸發(fā)器SQL>insertintotoysvalues(4,'水槍',0);--觸動(dòng)了觸發(fā)器SQL>insertintotoysvalues(5,'游戲機(jī)',10);--沒(méi)有觸動(dòng)觸發(fā)器二、觸發(fā)器的分類(lèi):2.數(shù)據(jù)庫(kù)級(jí)觸發(fā)器:在發(fā)生打開(kāi)、關(guān)閉、登錄和退出數(shù)據(jù)庫(kù)等系統(tǒng)事件時(shí)執(zhí)行。4.語(yǔ)句級(jí)觸發(fā)器:無(wú)論受影響的行數(shù)是多少,都只執(zhí)行一次--inserting謂詞,插入ifinsertingthenselectinto:fromdual;elsedbmsline('不能修改ID的值');endif;給A表中插入值:insertintoAvalues(10,'jack');---------------5jackifinsertingthenselectinto:fromdual;elsedbmsline('不能修改ID的值');raise_application_error(20003,'不能修改ID的值');endif;創(chuàng)建一個(gè)觸發(fā)器:createorreplacetriggertrigifinsertingthendbmsline('在表中執(zhí)行了插入操作');elsifupdatingthendbmsline('在表中執(zhí)行了更新操作');elsedbmsline('在表中執(zhí)行了刪除操作');endif;觸發(fā)器創(chuàng)建完成之后,對(duì)表進(jìn)行一系列操作如:創(chuàng)建一個(gè)表用來(lái)記錄:創(chuàng)建一個(gè)觸發(fā)器:SQL>createtableB(idint);表已創(chuàng)建。表已刪除。刪除觸發(fā)器:制。他主要是對(duì)視圖進(jìn)行操作的,如果不對(duì)視圖操作沒(méi)什么意義。3.理解數(shù)據(jù)庫(kù)的規(guī)范化-三大范式●為什么需要設(shè)計(jì)數(shù)據(jù)庫(kù)?1.節(jié)省數(shù)據(jù)的存儲(chǔ)空間2.能夠保證數(shù)據(jù)的完整性3.方便進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)糟糕的數(shù)據(jù)庫(kù)設(shè)計(jì):1.數(shù)據(jù)冗余、存儲(chǔ)空間浪費(fèi)3.數(shù)據(jù)更新和插入的異常●軟件項(xiàng)目開(kāi)發(fā)周期1.需求分析階段:分析客戶的業(yè)務(wù)和數(shù)據(jù)處理需求;2.概要設(shè)計(jì)階段:設(shè)計(jì)數(shù)據(jù)庫(kù)的E-R模型圖,確認(rèn)需求信息的正確和完整;行審核;4.代碼編寫(xiě)階段:選擇具體數(shù)據(jù)庫(kù)進(jìn)行物理實(shí)現(xiàn),并編寫(xiě)代碼實(shí)現(xiàn)前端應(yīng)用;5.軟件測(cè)試階段:……6.安裝部署:……●設(shè)計(jì)數(shù)據(jù)庫(kù)的步驟1.收集信息:與該系統(tǒng)有關(guān)人員進(jìn)行交流、坐談,充分理解數(shù)據(jù)庫(kù)需要完成的任務(wù)。用戶注冊(cè)和登錄,后臺(tái)數(shù)據(jù)庫(kù)需要存放用戶的用戶發(fā)貼,后臺(tái)數(shù)據(jù)庫(kù)需要存放貼子相關(guān)信論壇版塊管理:后臺(tái)數(shù)據(jù)庫(kù)需要存放各個(gè)版塊信息,如版主、版塊名稱、貼子數(shù)等;2.標(biāo)識(shí)對(duì)象(實(shí)體-Entity)如:實(shí)體一般是名詞:3.標(biāo)識(shí)每個(gè)實(shí)體的屬性(Attribute)如:論壇用戶:呢稱、密碼、電子郵件、生日、性別、用戶的等級(jí)、備注信息、注冊(cè)信息、主貼:發(fā)貼人、發(fā)貼表情、回復(fù)數(shù)量、標(biāo)題、正文、點(diǎn)擊數(shù)、狀態(tài)、最后回復(fù)時(shí)間?;刭N:帖子編號(hào)、回帖人、回帖表情、標(biāo)題、正文、回帖時(shí)間、點(diǎn)擊4.標(biāo)識(shí)對(duì)象之間的關(guān)系(Relationship)如:跟貼和主貼有主從關(guān)系:我們需要在跟貼對(duì)象中表明它是誰(shuí)的跟貼;版塊和用戶有關(guān)系:從用戶對(duì)象中可以根據(jù)版塊對(duì)象查出對(duì)應(yīng)的版主用戶的情況;主貼和版塊有主從關(guān)系:需要表明發(fā)貼是屬跟貼和版塊有主從關(guān)系:需要表明跟貼是屬于哪個(gè)版塊的;5.繪制E-R(Entity-Relationship)實(shí)體關(guān)系圖如:標(biāo)識(shí)每個(gè)表的主鍵列,需要注意的是:沒(méi)有主鍵的表添加ID編號(hào)列,它沒(méi)有實(shí)際含義,用●數(shù)據(jù)規(guī)范化),如在一個(gè)表中的一列的值為:中國(guó)北京,這就違反了第一范如圖:2.第二范式如果一個(gè)關(guān)系滿足1NF,并且除了主鍵以外的其他列,都依賴與該主鍵,則滿足第二范式如有一個(gè)表其字段為:3.第三范式起來(lái)關(guān)系。存在這樣關(guān)系的字段是不能同時(shí)存在于一個(gè)表中的,也就是要直接關(guān)聯(lián)的不要間接關(guān)聯(lián)的?!褚?guī)范化實(shí)例假設(shè)某建筑公司要設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)。公司的業(yè)務(wù)規(guī)則概括說(shuō)明如下:公司承擔(dān)多個(gè)工程項(xiàng)目,每一項(xiàng)工程有:工程號(hào)、工程公司有多名職工,每一名職工有:職工號(hào)、姓名、性別、職務(wù)(工要重復(fù)輸入大量的數(shù)據(jù)。這種重復(fù)的輸入操作,很可能導(dǎo)致數(shù)據(jù)的不一致性。第4張表的字段包括:工程號(hào)、職工號(hào)、工時(shí)---->以工程號(hào)和職工號(hào)同時(shí)為主鍵,這是一●規(guī)范化和性能的關(guān)系1.為滿足某種商業(yè)目標(biāo),數(shù)據(jù)庫(kù)性能比規(guī)范化數(shù)據(jù)庫(kù)更重要2.通過(guò)在給定的表中添加額外的字段,以大量減少需要從中搜索信息所需的時(shí)間),4.進(jìn)行規(guī)范化的同時(shí),還需要綜合考慮數(shù)據(jù)庫(kù)的性能。●總結(jié)在需求分析階段,設(shè)計(jì)數(shù)據(jù)庫(kù)的一般步驟為:收集信息、標(biāo)識(shí)對(duì)象、標(biāo)識(shí)每個(gè)對(duì)象的屬性、標(biāo)識(shí)對(duì)象之間的關(guān)系。在概要設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段,設(shè)計(jì)數(shù)據(jù)庫(kù)的步驟為:3.應(yīng)用三大范式規(guī)范化表格為了設(shè)計(jì)結(jié)構(gòu)良好的數(shù)據(jù)庫(kù),需要遵守一些專門(mén)的規(guī)則,稱為數(shù)據(jù)庫(kù)的設(shè)計(jì)范式。在制作數(shù)據(jù)庫(kù)時(shí)冗余是不可能是完全避免的,而且適當(dāng)?shù)娜哂噙€可以提高性能。物理備份是對(duì)數(shù)據(jù)庫(kù)的操作系統(tǒng)物理文件(如數(shù)據(jù)文件●故障類(lèi)型在數(shù)據(jù)庫(kù)無(wú)法正確讀取或?qū)懭肽硞€(gè)數(shù)據(jù)庫(kù)文件時(shí),●導(dǎo)出和導(dǎo)入實(shí)用程序使用以下三種方法調(diào)用導(dǎo)出和導(dǎo)入實(shí)用程序:1.命令參數(shù)行、交互提示符、參數(shù)文件命令參數(shù)行:在命令行指定執(zhí)行程序的參數(shù)和參數(shù)值。交互提示符:以交互的方式提示用戶逐個(gè)輸入?yún)?shù)的值?!駥?dǎo)出和導(dǎo)入數(shù)據(jù)庫(kù)對(duì)象的四種模式是:1.完全數(shù)據(jù)庫(kù):導(dǎo)出和導(dǎo)入整個(gè)數(shù)據(jù)庫(kù)中的所有對(duì)象2.表:導(dǎo)出和導(dǎo)入一個(gè)或多個(gè)指定的表或表分區(qū)3.用戶:導(dǎo)出和導(dǎo)入一個(gè)用戶模式中的所有4.表空間:導(dǎo)出和導(dǎo)入一個(gè)或多個(gè)指定的表空間中的所有對(duì)象---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------格式:使用參數(shù)文件導(dǎo)出數(shù)據(jù):expsystem/aptechparfile='C:\'●導(dǎo)入實(shí)用程序有如下常用命令參數(shù):----------------------------------------------------------------------------------------------------------------------------------------------FILE指定要導(dǎo)入的二進(jìn)制文件名格式:使用參數(shù)文件導(dǎo)入數(shù)據(jù):impsystem/oracleparfile='C:\'在安裝完成之后可以使用兩個(gè)命令進(jìn)行數(shù)據(jù)庫(kù)的備份與恢復(fù)。戶名和口令(scott/tiger),進(jìn)入到帳戶以后,我們看一下在這個(gè)帳戶下都有那些表有的表都導(dǎo)出完成之后,備份就完成了。檢驗(yàn)備份的效果,我們把數(shù)據(jù)庫(kù)中的表全部表刪除,然后再進(jìn)行恢復(fù)。1.數(shù)據(jù)泵導(dǎo)出和導(dǎo)入可以實(shí)現(xiàn)邏輯備份和邏輯恢復(fù)。2.數(shù)據(jù)泵導(dǎo)出和導(dǎo)入可以在數(shù)據(jù)庫(kù)用戶之間移動(dòng)對(duì)象。4.使用數(shù)據(jù)泵導(dǎo)入可以實(shí)現(xiàn)表空間搬移使用注意事項(xiàng):oracle客戶端使用。3.兩個(gè)工具的導(dǎo)出只能用各自對(duì)應(yīng)的導(dǎo)入工具。1.scott/tiger指定由哪個(gè)一有戶導(dǎo)出、2.directory:指定導(dǎo)出文體的路徑3.dumpfile:指定導(dǎo)出的文件名4.tables:指定導(dǎo)出的表的集合如下:2.導(dǎo)出方案普通用戶只能導(dǎo)出自身方案,如果要導(dǎo)出其他方案,由要求用戶必須具有DBA角色或者3.導(dǎo)出表空間4.導(dǎo)出數(shù)據(jù)庫(kù)導(dǎo)出數(shù)據(jù)庫(kù)是指將數(shù)據(jù)庫(kù)所有對(duì)象及數(shù)據(jù)存儲(chǔ)到轉(zhuǎn)儲(chǔ)文件中選項(xiàng)來(lái)完成的。數(shù)據(jù)泵導(dǎo)入包括:導(dǎo)入表、導(dǎo)入方案、導(dǎo)入表空間、導(dǎo)入數(shù)據(jù)庫(kù)等四種模式。1.導(dǎo)入表:--使用系統(tǒng)帳戶2.導(dǎo)入方案:3.導(dǎo)入表空間4.導(dǎo)入數(shù)據(jù)庫(kù)2.導(dǎo)出方案:2.導(dǎo)入方案:3.導(dǎo)入數(shù)據(jù)庫(kù)表空間脫機(jī)--->備份表空間---->恢復(fù)表空確保數(shù)據(jù)庫(kù)當(dāng)前不處于歸檔方式--->設(shè)置相關(guān)數(shù)據(jù)庫(kù)初始化參數(shù)--->在歸檔日志方式下啟已連接。SQL>archiveloglist2.手動(dòng)歸檔:手動(dòng)歸檔允許用戶手動(dòng)歸檔非活動(dòng)日志文件文件的已填充組現(xiàn)自己都有一個(gè)要求。因?yàn)橹鲃?dòng)權(quán)一直都是由數(shù)據(jù)庫(kù)廠商把握,所以早期的java程序員要廠商來(lái)實(shí)現(xiàn),那個(gè)數(shù)據(jù)庫(kù)要和java相連,必須實(shí)現(xiàn)sun公司推出的這個(gè)接口。所以對(duì)于現(xiàn)有數(shù)據(jù)庫(kù)的目的。如:Oracle數(shù)據(jù)庫(kù)的驅(qū)動(dòng)是:(.)如:(jdbc:oracle:thin:@localhost:1521:orcl)這是一個(gè)Oracle數(shù)據(jù)庫(kù)的URL信息。用戶如:(scott)密碼如:(tiger)驅(qū)動(dòng)程序(驅(qū)動(dòng)程序會(huì)自動(dòng)通過(guò)()方法注冊(cè))。try{(“.”);.println(“找不到驅(qū)動(dòng)程序類(lèi)”);}如:(url,user,pwd);staticConnectiongetConnection(Stringurl)staticConnectiongetConnection(Stringurl,Propertiesinfo)staticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)publicclassdataSourse{//驅(qū)動(dòng)程序名publicStringdriver=".";publicStringurl="jdbc:oracle:thin:@localhost:1521:orcl";//用戶名publicStringuser="scott";//密碼//獲取連接的方法注:Connection()是一個(gè)接口,所以這是一個(gè)接口類(lèi)型的方法//動(dòng)態(tài)加載驅(qū)動(dòng)程序(driver);//加載驅(qū)動(dòng)Class類(lèi)的forName()方法conn=(url,user,pwd);}//創(chuàng)建對(duì)象//輸出連接對(duì)象.println(con);}}平時(shí)不這么做,而是將這些信息放到一個(gè)屬性文件中。屬性文件是以properties為擴(kuò)展名driver=.url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl然后我們可以在類(lèi)中加載這個(gè)文件,加載properties文件有兩個(gè)方法,一是利用構(gòu)造器,靜態(tài)區(qū)塊也是在創(chuàng)建對(duì)象時(shí)執(zhí)行,而且只執(zhí)行一次,我們平時(shí)常用構(gòu)造進(jìn)行器加載。publicinterfaceIdataSource{//獲得數(shù)據(jù)庫(kù)連接//關(guān)閉數(shù)據(jù)庫(kù)連接}//獲取連接所需要的信息publicStringdriver="";publicStringurl="";publicStringuser="";//在構(gòu)造器初始化時(shí)。加載屬文件,獲取相關(guān)信息publicdataSource(){//創(chuàng)建properties屬性文件對(duì)象try{//加載屬性文件(newFileInputStream("D:\\"));//文件所在路徑//通過(guò)Properties對(duì)象的getProperty()方法獲得相應(yīng)的值driver=("driver");url=("url");user=("user");try{//動(dòng)態(tài)加載驅(qū)動(dòng)(driver);e.printStackTrace();}e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}//獲取數(shù)據(jù)庫(kù)連接return(url,user,pwd);;}//關(guān)閉數(shù)據(jù)庫(kù)連接if(conn!=null&&!()){();}}}完數(shù)據(jù)庫(kù)之后,如果確定不在需要連接,則必須用close()方法來(lái)關(guān)閉與數(shù)據(jù)庫(kù)的連接,以釋放連接時(shí)相關(guān)的必要資源?!馩racle數(shù)據(jù)庫(kù):驅(qū)動(dòng)程序包名:ojdbc14.jar驅(qū)動(dòng)類(lèi)的名字:.要根據(jù)數(shù)據(jù)庫(kù)的安裝情況填寫(xiě)。其中各個(gè)部分含義如下:dbip–為數(shù)據(jù)庫(kù)服務(wù)器的IP地址,如果是本地可寫(xiě):localhost或。port–為數(shù)據(jù)庫(kù)的監(jiān)聽(tīng)端口,需要看安裝時(shí)的配置,缺省為1521。jdbc:oracle:thin:@localhost:1521:allandb驅(qū)動(dòng)程序包名:式。紅色字體部需要根據(jù)數(shù)據(jù)庫(kù)的安裝情況填dbip–為數(shù)據(jù)庫(kù)服務(wù)器的IP地址,如果是本地可寫(xiě):localhost或。驅(qū)動(dòng)類(lèi)的名字:.根據(jù)數(shù)據(jù)庫(kù)的安裝情況填寫(xiě)。其中各個(gè)部分含義如下:dbip–為數(shù)據(jù)庫(kù)服務(wù)器的IP地址,如果是本地可寫(xiě):localhost或。jdbc:mysql://localhost:3306/allandb數(shù)據(jù)庫(kù)連接的取得是一個(gè)非常消耗時(shí)間和資源的動(dòng)作。取得一個(gè)數(shù)據(jù)庫(kù)的間和資源,通常會(huì)實(shí)現(xiàn)一個(gè)連接池。如果有了連接池,那么我們有需要不需要時(shí)就將連接放回到池中,而不是直接關(guān)閉連接。使用ArrayList來(lái)實(shí)現(xiàn)連接池。接口:publicinterfaceIdataSource{//獲得連接//關(guān)閉連接需要關(guān)閉其對(duì)象}我們要手動(dòng)將他連帶的對(duì)象關(guān)掉,如執(zhí)行語(yǔ)現(xiàn)在創(chuàng)建一個(gè)連接池:publicStringdriver="";//驅(qū)動(dòng)publicStringurl="";//jdbcURLpublicStringuser="";//用戶privateintmax;//連接池中允許存放的最大連接數(shù)//用ArrayList實(shí)現(xiàn)連接池//在構(gòu)造器初始化時(shí),加載到屬性文件,獲取相關(guān)信息publicConnectioPool(){//創(chuàng)建Properties屬性文件對(duì)象//加屬性文件try{(newFileInputStream("D:\\"));//通過(guò)Properties對(duì)象的getProperty()方法獲得相應(yīng)的值driver=("driver");url=("url");user=("user");max=(("poolsize"));//加載驅(qū)動(dòng)程序類(lèi)(driver);e.printStackTrace();}e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}Setrs){if(rs!=null){try{();e.printStackTrace();}}if(stmt!=null){try{();e.printStackTrace();}}if(()==max){try{();e.printStackTrace();}}else{(connection);}}if(()==0){return(url,user,pwd);}else{return(()-1);}}}c3p0(推薦):proxool(推薦):最為關(guān)鍵的是這個(gè)連接池提供監(jiān)控的功能,方便易用,便于發(fā)現(xiàn)連接泄漏的情況。如:建表范例:publicstaticvoidmain(String[]args)throwsSQLException{//聲明數(shù)據(jù)庫(kù)連接池對(duì)象//獲得數(shù)據(jù)庫(kù)連接Stringsql="createtableA(idint,namevarchar2(10))";(sql);//注:executeUpdate()返回的一個(gè)整型if(stmt!=null){();}//關(guān)閉連接(con);}}法("inserintoA(1001,'Jack')");的是int類(lèi)型的,表示記錄變動(dòng)的數(shù)據(jù)。而executeQurey()方法返回的是一個(gè).ResultSet對(duì)象,代表查詢的結(jié)果,查詢的結(jié)果會(huì)一條一條的記錄,可以使用ResultSet的next()方法來(lái)移至下一條記錄,它會(huì)返回true或false表示是否有下一條記錄,接著可以使用getXXX()方法來(lái)獲得數(shù)據(jù)。例如:getString()getInt()getFloat()等方法分別獲得相應(yīng)字段類(lèi)型的記錄,getXXX()方法提供("id");//建議使用這種方式(1);publicstaticvoidmain(String[]args)throwsSQLException{//創(chuàng)建數(shù)據(jù)庫(kù)連接池//獲得數(shù)據(jù)庫(kù)連接try{//執(zhí)行查詢等到一個(gè)結(jié)果集ResultSetrs=(sql);//循環(huán)讀取結(jié)果集中的數(shù)據(jù)while(()){.print(("ename")+"\t");.print(("empno")+"\t");.println(("deptno"));}e.printStackTrace();}finally{//關(guān)閉Result對(duì)象//(rs);//(stmt);//關(guān)閉連接對(duì)象(con);}}}ResultSetexecuteQuery(Stringsql)ResultSet是一個(gè)接口他中有一個(gè)方法:將指針從當(dāng)前位置下移一行。新數(shù)目。如果事先無(wú)法得知進(jìn)行查詢或是更新,就可以使用execute()方法。PrepareStatementstmt=("insertintojdbc(id,name)(?,?)");setInt()setString()setXXX()方法,制定?處真正應(yīng)該有的參數(shù),如:(1001);("lixiaolong");publicstaticvoidmain(String[]args)throwsSQLException{//創(chuàng)建數(shù)據(jù)庫(kù)連接池//獲得數(shù)據(jù)庫(kù)連接Stringsql="insertintojdbcvalues(?,?)";(false);//ture為自動(dòng)提交false為手動(dòng)提交不寫(xiě)默認(rèn)為自動(dòng)提交PreparedStatementpstt=(sql).println("請(qǐng)輸入ID");intid=();(1,id);//有兩個(gè)參數(shù)第一個(gè)表示索引值,第二個(gè)是列名.println("請(qǐng)輸入姓名");();();//提交事物注:事物有四個(gè)特性.println("賦值成功");}}即可。(false);("......");//SQL語(yǔ)句("......");//SQL語(yǔ)句("......");//SQL語(yǔ)句();():publicstaticvoidmain(String[]args)throwsSQLException{Stringsql="insertintojdbcvalues(?,?)";(false);//ture為自動(dòng)提交false為手動(dòng)提交不寫(xiě)默認(rèn)為自動(dòng)提交PreparedStatementpstt=(sql)//插入一萬(wàn)條記錄作批量處理for(inti=1;i<5;i++){(1,i);(2,"JACK"+i);();}();//批執(zhí)行語(yǔ)句();//提交事物.println("賦值成功");}}ResultSet數(shù)據(jù)的數(shù)據(jù),即描述所查到的數(shù)據(jù)的背后的數(shù)據(jù)描述,用來(lái)表示表的名稱,字段publicstaticvoidmain(String[]args)throwsSQLException{//聲明數(shù)據(jù)庫(kù)連接池對(duì)象//獲得數(shù)據(jù)庫(kù)連接//聲明結(jié)果集對(duì)象ResultSetrs=null;

溫馨提示

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