毛片在线视频观看,一级日韩免费大片,在线网站黄色,澳门在线高清一级毛片

薈聚奇文、博采眾長(zhǎng)、見賢思齊
當(dāng)前位置:公文素材庫(kù) > 計(jì)劃總結(jié) > 工作總結(jié) > oracle總結(jié)

oracle總結(jié)

網(wǎng)站:公文素材庫(kù) | 時(shí)間:2019-05-29 07:03:36 | 移動(dòng)端:oracle總結(jié)

oracle總結(jié)

Oracle總結(jié)

當(dāng)今應(yīng)用最廣泛的數(shù)據(jù)庫(kù)產(chǎn)品莫過于oracle數(shù)據(jù)庫(kù),從工業(yè)領(lǐng)域到商業(yè)領(lǐng)域,從大型機(jī)到微機(jī),從Unix操作系統(tǒng)到Windows操作系統(tǒng),到處都可以找到oracle數(shù)據(jù)庫(kù)的應(yīng)用案例。

隨著oracle數(shù)據(jù)庫(kù)的發(fā)展,越來(lái)越多的企業(yè)都將oracle數(shù)據(jù)庫(kù)應(yīng)用到自己的企業(yè)中,對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存、管理。Oracle之所以廣受用戶的青睞,其主要原因在于一下幾個(gè)方面。

(1)支持多用戶、大事務(wù)量的事物處理(2)提供標(biāo)準(zhǔn)操作借口

(3)實(shí)施安全控制和完整控制(4)支持分布式數(shù)據(jù)處理

(5)具有可移植性、可兼容性和可連續(xù)性

伴隨這些條件,作為我們信息與計(jì)算科學(xué)專業(yè)的學(xué)生,如果能夠掌握oracle數(shù)據(jù)庫(kù)這門重要的技術(shù),將對(duì)我們以后在數(shù)據(jù)庫(kù)技術(shù)的學(xué)習(xí)中啟到舉一反三的作用。不管是以前學(xué)習(xí)的SQLserver,還是以后將要學(xué)到的數(shù)據(jù)挖掘,通過學(xué)習(xí)oracle數(shù)據(jù)庫(kù)后,就能夠?qū)?shù)據(jù)庫(kù)的結(jié)構(gòu)有更深的理解,便于數(shù)據(jù)的處理。

下面我就將自己對(duì)oracle數(shù)據(jù)庫(kù)的理解做如下的總結(jié)。一、在Windows系統(tǒng)下,安裝好oracle數(shù)據(jù)庫(kù)。

二、可以用DBCA創(chuàng)建或手動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)。既然使用DBCA創(chuàng)建數(shù)據(jù)庫(kù)沒有難度,我就主要說(shuō)下手動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)。其概要內(nèi)容如下:

(1)確定新建數(shù)據(jù)庫(kù)的名稱與實(shí)例名稱(在cmd下setoracle_sid=test)

(2)在相應(yīng)的地方創(chuàng)建初始化參數(shù)文本文件(修改示例的四個(gè)名稱復(fù)制到相應(yīng)的地方)(3)創(chuàng)建口令文件(orapwdfile=d:\\oracle\\product\\10.0.0\\db_1\\database\\pwdtest.ora)

(4)創(chuàng)建實(shí)例(oradimnewsidteststartmodeautopfiled:\\oracle\\product\\10.0.0\\admin\\test\\pfile\\inittest.ora)

(5)啟動(dòng)實(shí)例(1、sqlplus/nolog,2、conn用戶名/密碼assysdba,3、startupnomount)

(6)創(chuàng)建數(shù)據(jù)庫(kù)(7)創(chuàng)建附加表空間

(8)運(yùn)行腳本創(chuàng)建數(shù)據(jù)字典視圖(9)創(chuàng)建服務(wù)器初始化參數(shù)文件三、數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)

Oracle數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)分為物理存儲(chǔ)結(jié)構(gòu)和邏輯存儲(chǔ)結(jié)構(gòu)兩種。物理存儲(chǔ)結(jié)構(gòu)描述了oracle數(shù)據(jù)庫(kù)中的數(shù)據(jù)在操作系統(tǒng)中的組織和管理,邏輯存儲(chǔ)結(jié)構(gòu),描述了oracle數(shù)據(jù)庫(kù)內(nèi)部的組織和管理。

Oracle數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)由數(shù)據(jù)文件、控制文件、重做日志文件、歸檔文件、初始化參數(shù)文件、跟蹤文件、口令文件、警告文件、備份文件組成。

(1)數(shù)據(jù)文件(.dbf)

數(shù)據(jù)文件是用于保存數(shù)據(jù)庫(kù)中數(shù)據(jù)的文件,系統(tǒng)數(shù)據(jù)、數(shù)據(jù)字典數(shù)據(jù)、臨時(shí)數(shù)據(jù)、索引數(shù)據(jù)、應(yīng)用數(shù)據(jù)等都物理地址存儲(chǔ)在數(shù)據(jù)文件中。用戶對(duì)數(shù)據(jù)庫(kù)的操作,例如數(shù)據(jù)庫(kù)的插入、刪除、修改、查詢等,其本質(zhì)都是對(duì)數(shù)據(jù)文件進(jìn)行操作。

在oracle數(shù)據(jù)庫(kù)中,數(shù)據(jù)文件都是衣服與表空間而存在的。一個(gè)表空間可以包含幾個(gè)數(shù)據(jù)文件,但一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。在邏輯上,數(shù)據(jù)庫(kù)對(duì)象都存放在表空間中,

實(shí)質(zhì)上是存放在表空間所對(duì)應(yīng)的數(shù)據(jù)文件中。

(2)控制文件(.ctl)

控制文件描述了整個(gè)數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)信息。控制文件在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)創(chuàng)建,每個(gè)數(shù)據(jù)庫(kù)至少有一個(gè)控制文件。在數(shù)據(jù)庫(kù)啟動(dòng)時(shí),數(shù)據(jù)庫(kù)實(shí)例依賴初始化參數(shù)定位控制文件,然后根據(jù)控制文件的信息加載數(shù)據(jù)文件和重做日志文件,最后打開數(shù)據(jù)文件和重做日志文件。

控制文件主要存儲(chǔ)與數(shù)據(jù)結(jié)構(gòu)相關(guān)的一些信息,包括數(shù)據(jù)庫(kù)的名稱和標(biāo)識(shí)、數(shù)據(jù)庫(kù)創(chuàng)建的時(shí)間、表空間名稱、數(shù)據(jù)文件和重做日志文件的名稱和位置、當(dāng)前重做日志文件序列號(hào)、數(shù)據(jù)庫(kù)檢查點(diǎn)的信息、回退段的開始和結(jié)束、重做日志的歸檔信息、備份信息、數(shù)據(jù)恢復(fù)所需要的同步信息。

(3)重做日志文件(.log)

重做日志文件以重做記錄的形式記錄、保存用戶對(duì)數(shù)據(jù)庫(kù)所進(jìn)行的變更操作,包括用戶執(zhí)行DDL,DML語(yǔ)句操作。

(4)歸檔文件(.arc)

用于保存已寫滿的重做日志文件。(5)初始化參數(shù)文件(.ora)

用于設(shè)置數(shù)據(jù)庫(kù)啟動(dòng)時(shí)的參數(shù)初始值。(6)跟蹤文件

用于記錄用戶進(jìn)程、數(shù)據(jù)庫(kù)后臺(tái)進(jìn)程等的運(yùn)行情況。(7)口令文件(.ora)

用于保存具有有SYSDBA,SYSOPER權(quán)限的用戶名和SYS用戶口令。(8)警告文件

用于記錄數(shù)據(jù)庫(kù)的重要活動(dòng)以及發(fā)生的錯(cuò)誤。(9)備份文件

用于存放數(shù)據(jù)庫(kù)備份所產(chǎn)生的文件。

Oracle10g數(shù)據(jù)庫(kù)的邏輯儲(chǔ)存結(jié)構(gòu)分為數(shù)據(jù)塊、區(qū)、段、表空間4種。其中,數(shù)據(jù)塊是數(shù)據(jù)庫(kù)中最小I/O單元,由若干個(gè)連續(xù)的數(shù)據(jù)塊組成的區(qū)是數(shù)據(jù)庫(kù)中最小的存儲(chǔ)分配單元,由若干個(gè)區(qū)形成的段是相同類型數(shù)據(jù)的存儲(chǔ)分配區(qū)域,由若干個(gè)段形成的表空間是最大的邏輯存儲(chǔ)單元,所有的表空間構(gòu)成一個(gè)數(shù)據(jù)庫(kù)。(1)表空間

一個(gè)數(shù)據(jù)庫(kù)由一個(gè)或多個(gè)表空間構(gòu)成。表空間是存儲(chǔ)模式對(duì)象的容器,一個(gè)數(shù)據(jù)庫(kù)對(duì)象只能存儲(chǔ)一個(gè)表空間中(分區(qū)表和分區(qū)索引除外),但是可以存儲(chǔ)在該表空間所對(duì)應(yīng)的一個(gè)或多個(gè)數(shù)據(jù)文件中。若表空間只有一個(gè)數(shù)據(jù)文件,則該表空間中所有對(duì)象都保存在該文件中;若表空間對(duì)應(yīng)多個(gè)數(shù)據(jù)文件,則表空間中的對(duì)象可以分布于不同的數(shù)據(jù)文件中。

表空間分為系統(tǒng)表空間和非系統(tǒng)表空間兩類,其中非系統(tǒng)表空間包括撤銷表空間、臨時(shí)表空間和用戶表空間。

1)系統(tǒng)表空間。系統(tǒng)表空間包括SYSTEM表空間和輔助系統(tǒng)表空間SYSAUX,他們是數(shù)據(jù)庫(kù)創(chuàng)建時(shí)自動(dòng)創(chuàng)建的。其中,SYSTEM表空間是系統(tǒng)默認(rèn)的表空間。

①SYSTEM。

System表空間主要存儲(chǔ)數(shù)據(jù)庫(kù)的數(shù)據(jù)字典、PL/SQL程序的源代碼和解釋代碼、數(shù)據(jù)庫(kù)對(duì)象的定義等信息。

②SYSAUX。

Sysaux表空間主要用于存儲(chǔ)數(shù)據(jù)庫(kù)組件等信息,以減小system表空間的負(fù)荷。2)非系統(tǒng)表空間。①撤銷表空間。

撤銷表空間由回滾段組成。每個(gè)數(shù)據(jù)庫(kù)可以有多個(gè)撤銷表空間,但每個(gè)數(shù)據(jù)庫(kù)實(shí)例只能使用一個(gè)由參數(shù)UNDO_TABLESPACE設(shè)置的撤銷表空間。

當(dāng)初始化參數(shù)UNDO_TABLESPACE=AUTO時(shí),系統(tǒng)使用撤銷表空間自動(dòng)進(jìn)行回滾信息管理。

②臨時(shí)表空間。

臨時(shí)表空間是指專門進(jìn)行臨時(shí)數(shù)據(jù)管理的表空間,這些臨時(shí)數(shù)據(jù)在會(huì)話結(jié)束時(shí)會(huì)自動(dòng)釋放。

如果沒有用戶指定臨時(shí)表空間,那么oracle會(huì)自動(dòng)將系統(tǒng)的默認(rèn)臨時(shí)表空間(DefaultTemporaryTablespace)作為用戶的臨時(shí)表空間。

③用戶表空間。

3)大文件表空間與小文件表空間

所謂大文件表空間是指一個(gè)表空間只包含一個(gè)大數(shù)據(jù)文件,該文件的最大尺寸為128TB(數(shù)據(jù)塊大小為32KB)或只32TB(數(shù)據(jù)塊大小為8KB)。

系統(tǒng)默認(rèn)創(chuàng)建的表空間稱為小文件表空間。那件表空間可以多達(dá)1024個(gè)數(shù)據(jù)文件。小文件表空間的總?cè)萘颗c大文件表空間的容量基本相似。

表空間管理。表空間管理只要包括表空間的創(chuàng)建、修改、刪除,以及表空間內(nèi)部區(qū)的分配、段的管理。

1)創(chuàng)建表空間。

①創(chuàng)建永久表空間使用CREATETABLESPACE語(yǔ)句來(lái)實(shí)現(xiàn),包含以下子句。設(shè)定表空間對(duì)應(yīng)的數(shù)據(jù)文件Datafile、表空間的管理方式EXTENTMANAGEMENT(默認(rèn)LOCAL)、定區(qū)的分配方式(默認(rèn)AUTOALLOCATE)、設(shè)定段的管理方式SEGMENTSPACEMANAGEMENT(默認(rèn)AUTO)。

②創(chuàng)建臨時(shí)表空間使用CREATETEMPORARYTABLESPACE語(yǔ)句實(shí)現(xiàn),用TEMPFILE子句設(shè)置臨時(shí)數(shù)據(jù)文件。本地管理的臨時(shí)表空間中區(qū)的分配方式只能是UNIFORM。

③創(chuàng)建撤銷表空間使用CREATEUNDOTABLESPACE語(yǔ)句實(shí)現(xiàn),其他子句不變。2)修改表空間。

①修改表空間的讀/寫性。使用ALTERTABLESPACE…READONLY|READWRITE設(shè)置。

②設(shè)置默認(rèn)表空間。在創(chuàng)建數(shù)據(jù)庫(kù)用戶時(shí),如果沒有使用DEFAULTTABLESPACE選項(xiàng)指定默認(rèn)(永久)表空間,則該用戶使用數(shù)據(jù)庫(kù)的默認(rèn)表空間;如果沒有使用DEFAULTTEMPPRARYTABLESPACE選項(xiàng)指定默認(rèn)臨時(shí)表空間,則該用戶使用數(shù)據(jù)庫(kù)的默認(rèn)臨時(shí)表空間。使用ALTERDATABASEDEFAULTTABLESPACE語(yǔ)句設(shè)置數(shù)據(jù)庫(kù)的默認(rèn)表空間;使用ALTERDATABASEDEFAULTTEMPORARYTABLESPACE語(yǔ)句設(shè)置數(shù)據(jù)庫(kù)的默認(rèn)臨時(shí)表空間。

③表空間的重命名。使用ALTERTABLESPACE…RENAMETO語(yǔ)句重命名表空間,但是不能重命名SYSTEM表空間和SYSAUX表空間,不能重命名處于脫機(jī)狀態(tài)或部分?jǐn)?shù)據(jù)文件處于脫機(jī)狀態(tài)的表空間。

3)表空間的備份

①使用ALTERTABLESPACE…BEGINBACKUP語(yǔ)句將表空間市值為備份模式。②在操作系統(tǒng)中備份表空間所對(duì)應(yīng)的數(shù)據(jù)文件。

③使用ALTERTABLESPACE…ENDBACKUP語(yǔ)句結(jié)束表空間的備份模式。4)刪除表空間

使用DORPTABLESPACE…INCLUDINGCONTENTS語(yǔ)句可以刪除表空間及其內(nèi)容。(2)數(shù)據(jù)塊

Oracle數(shù)據(jù)塊是數(shù)據(jù)庫(kù)中最小單元的邏輯存儲(chǔ)單元,也是數(shù)據(jù)庫(kù)執(zhí)行輸入/輸出操作的最小單位,由一個(gè)或多個(gè)操作系統(tǒng)塊構(gòu)成。

在oracle10g中,數(shù)據(jù)塊包括標(biāo)準(zhǔn)塊和非標(biāo)準(zhǔn)塊兩種,其中標(biāo)準(zhǔn)塊在數(shù)據(jù)庫(kù)創(chuàng)建時(shí)由DB_BLOCK_SIZE參數(shù)設(shè)置,其大小不可更改。

數(shù)據(jù)塊的結(jié)構(gòu)由塊頭部和存儲(chǔ)區(qū)兩部分構(gòu)成。塊頭部包括標(biāo)題、表目錄、行目錄三部分。對(duì)塊的管理分為手動(dòng)和自動(dòng)兩種。如果簡(jiǎn)歷表空間時(shí)使用本地管理方式,并且將段的管理方式設(shè)置為AUTO,則蠶蛹自動(dòng)方式管理塊。否則,DBA可以采用手動(dòng)管理方式,通過為段設(shè)置PCTFREE和PCTUSED兩個(gè)參數(shù)來(lái)控制數(shù)據(jù)塊中空閑空間的使用。

(3)區(qū)

區(qū)是由一系列連續(xù)的數(shù)據(jù)塊構(gòu)成的邏輯存儲(chǔ)單元,是存儲(chǔ)空間分配與回收的最小單位。(4)段

段是由一個(gè)或多個(gè)連續(xù)或不連續(xù)的區(qū)組成的邏輯存儲(chǔ)單元。段分為數(shù)據(jù)段、索引段、臨時(shí)段和回滾段4類。

四、數(shù)據(jù)庫(kù)實(shí)例

Oracle數(shù)據(jù)庫(kù)主要由兩部分構(gòu)成:放在磁盤中的物理數(shù)據(jù)庫(kù)和對(duì)物理數(shù)據(jù)庫(kù)進(jìn)行管理的數(shù)據(jù)庫(kù)管理系統(tǒng)。

數(shù)據(jù)庫(kù)與實(shí)例是一一對(duì)應(yīng)的。在并行oracle數(shù)據(jù)庫(kù)服務(wù)器結(jié)構(gòu)中,數(shù)據(jù)庫(kù)與實(shí)例是一對(duì)多的關(guān)系。

Oracle實(shí)例由內(nèi)存結(jié)構(gòu)和后臺(tái)進(jìn)程組成,內(nèi)存結(jié)構(gòu)又分為系統(tǒng)全局區(qū)(SGA)和程序全局區(qū)(PGA)。

(1)SGA

SGA主要由數(shù)據(jù)高速緩沖區(qū)、共享池、重做日志緩沖區(qū)、大型池、JAVA池、流池和其他結(jié)構(gòu)組成。

(2)PGA

PGA由排序區(qū)、會(huì)話區(qū)、游標(biāo)區(qū)和堆棧區(qū)組成。

Oracle后臺(tái)進(jìn)程進(jìn)程隨數(shù)據(jù)庫(kù)實(shí)例的啟動(dòng)而啟動(dòng),它們協(xié)調(diào)服務(wù)器進(jìn)程的工作,優(yōu)化系統(tǒng)的性能?梢酝ㄟ^初始化參數(shù)文件中參數(shù)的設(shè)置來(lái)確定啟動(dòng)后臺(tái)進(jìn)程的數(shù)量。

后臺(tái)過程包括DBWR、LGWR、CKPT、SMON、ARCH、RECO、LCKn、Dnnn。五、數(shù)據(jù)庫(kù)服務(wù)工作模式與數(shù)據(jù)字典

Oracle數(shù)據(jù)庫(kù)創(chuàng)建服務(wù)器進(jìn)程來(lái)處理連接到數(shù)據(jù)庫(kù)的用戶進(jìn)程的請(qǐng)求。根據(jù)工作方式的不同。可以分為專用服務(wù)器模式和共享服務(wù)器模式兩種。如果要數(shù)據(jù)庫(kù)運(yùn)行在共享服務(wù)器模式,則需要進(jìn)行數(shù)據(jù)庫(kù)吃實(shí)話參數(shù)的配置。

服務(wù)器進(jìn)程與用戶進(jìn)程是一對(duì)一的關(guān)系。各個(gè)專用服務(wù)器進(jìn)程之間是完全獨(dú)立的,它們之間沒有數(shù)據(jù)共享。

Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)字典是數(shù)據(jù)庫(kù)在創(chuàng)建的過程中創(chuàng)建的,由一系列表和視圖構(gòu)成,這些表和視圖對(duì)與所有的用戶,都是只讀。

六、模式對(duì)象

在oracle數(shù)據(jù)庫(kù)中,用戶數(shù)據(jù)是以對(duì)象的形式存在的,并以模式為單位進(jìn)行組織。所謂模式是指一系列邏輯數(shù)據(jù)結(jié)構(gòu)或?qū)ο蟮募。模式與用戶相對(duì)應(yīng),一個(gè)模式只能被一個(gè)數(shù)據(jù)庫(kù)用戶所擁有,并且模式的名稱與這個(gè)用戶的名稱相同。

表是數(shù)據(jù)庫(kù)中最基本的對(duì)象,數(shù)據(jù)庫(kù)中所有數(shù)據(jù)都以二維表的形式存在。在oracle數(shù)據(jù)庫(kù)中,根據(jù)表生存周期的不同,可以分為永久性表和臨時(shí)表;根據(jù)表中數(shù)據(jù)組織方式的不同,可分為標(biāo)準(zhǔn)表、索引化表、分區(qū)表及外部表等。

(1)表的創(chuàng)建。創(chuàng)建表使用CREATETABLE語(yǔ)句,語(yǔ)法為Createtabletable_name

(column_namedatatype[column_level_constraint]

[,column_namedatatype[column_level_constraint…][,table_level_constraint])

[parameter_list];

創(chuàng)建臨時(shí)表。使用CREATEGLOBALTEMPORARYTABLE語(yǔ)句創(chuàng)建臨時(shí)表,使用ONCOMMIT子句說(shuō)明表的類型,默認(rèn)為事務(wù)級(jí)別的臨時(shí)表。

(2)表約束。表創(chuàng)建后,可以通過ALTERTABLE語(yǔ)句添加和刪除約束。

添加約束可以分為添加主鍵約束、添加唯一行約束、添加檢查約束、添加外鍵約束、添加空/非空約束。

(3)修改表

表創(chuàng)建后,可以對(duì)表進(jìn)行修改,包括列的添加、刪除、修改,表參數(shù)的修改,表的移動(dòng)或重組,存儲(chǔ)看哦哦你關(guān)鍵的分配與回收,表的重命名和約束的添加、刪除、修改、激活、禁用。

索引化表是一種特殊的表。要?jiǎng)?chuàng)建索引化表,必須在CREATETABLE語(yǔ)句中顯式地指定ORGANIZATIONINDEX關(guān)鍵字,同時(shí)必須建立一個(gè)PRIMARYKEY約束。

分區(qū)表。所謂分區(qū)是指將一個(gè)巨型表或巨型索引分成若干個(gè)獨(dú)立的組成部分進(jìn)行存儲(chǔ)和管理,每一個(gè)相對(duì)小的、可以獨(dú)立管理的的部分。

外部表是一種特殊的表,在數(shù)據(jù)庫(kù)中只保存表的鼎,而數(shù)據(jù)以文字形式保存在數(shù)據(jù)庫(kù)之外的操作系統(tǒng)中,數(shù)據(jù)源文件與表之間維持映射關(guān)系。

七、安全管理

Oracle數(shù)據(jù)安全控制機(jī)制包括以下六個(gè)方面。

(1)用戶管理:為了保證只有合法的身份的用戶擦能訪問數(shù)據(jù)庫(kù)。(2)權(quán)限管理:用戶登錄數(shù)據(jù)庫(kù)后,只能進(jìn)行其權(quán)限范圍內(nèi)的操作。(3)角色管理:通過角色方便地實(shí)現(xiàn)用戶權(quán)限的授予與收回。

(4)表空間的設(shè)置和配額:通過設(shè)置用戶的默認(rèn)表空間、臨時(shí)表空間和在臨時(shí)表空間上的使用配額,可以有效的控制用戶對(duì)數(shù)據(jù)庫(kù)存儲(chǔ)空間的使用。

(5)用戶資源限制:通過概要文件,限制用戶對(duì)數(shù)據(jù)庫(kù)資源的使用。(6)數(shù)據(jù)庫(kù)審計(jì):監(jiān)視和記錄用戶在數(shù)據(jù)庫(kù)中的活動(dòng)。八、備份與恢復(fù)

數(shù)據(jù)庫(kù)備份就是數(shù)據(jù)庫(kù)中部分或全部數(shù)據(jù)進(jìn)行復(fù)制,形成副本,存放到一個(gè)相對(duì)獨(dú)立的設(shè)備上,如磁帶、磁盤,以備將來(lái)數(shù)據(jù)庫(kù)出現(xiàn)故障時(shí)使用。根據(jù)數(shù)據(jù)備份方式的不同,數(shù)據(jù)庫(kù)備份分為物理備份和邏輯備份兩類。武庫(kù)備份是將組成數(shù)據(jù)庫(kù)的數(shù)據(jù)文件、重做日志文件、控制文件、初始化參數(shù)文件等操作操作系統(tǒng)文件進(jìn)行復(fù)制,將形成的副本保存到與當(dāng)前系統(tǒng)獨(dú)立的磁盤或磁帶上。邏輯備份是指利用oracle提供的當(dāng)初工具將數(shù)據(jù)庫(kù)中的數(shù)據(jù)抽取出來(lái)存放到一個(gè)二進(jìn)制文件中。

以上就是我目前學(xué)習(xí)到有關(guān)oracle數(shù)據(jù)庫(kù)的一些知識(shí)。雖然,現(xiàn)在只學(xué)習(xí)到oracle數(shù)據(jù)庫(kù)的一些皮毛,但是我相信在以后的學(xué)習(xí)或工作將繼續(xù)對(duì)oracle數(shù)據(jù)庫(kù)做更加深刻的理解。

擴(kuò)展閱讀:Oracle總結(jié)

Oracle

一些概念

Linux中登錄oracle的命令:sqlplus用戶名/密碼

showuser顯示當(dāng)前登錄的身份.setpauseon(網(wǎng)頁(yè)中分頁(yè))

setpauseoff分頁(yè)顯示(SQL*plus中在網(wǎng)頁(yè)中是不分頁(yè)).oracle中默認(rèn)日期和字符是左對(duì)齊,數(shù)字是右對(duì)齊tableorviewdoesnotexist;表或示圖不存在

edit命令用于自動(dòng)打開vi修改剛修執(zhí)行過的sql的命令。

查看表的結(jié)構(gòu)(包含的字段):descs_dept(控制臺(tái));descdept(瀏覽器)查詢:selecttable_namefromuser_tables;(控制臺(tái))

一、數(shù)據(jù)庫(kù)基本概念

1)數(shù)據(jù)庫(kù)管理系統(tǒng):一種操縱和管理數(shù)據(jù)庫(kù)的大型軟件,是用于建立、使用和維護(hù)數(shù)據(jù)庫(kù),Oracle、DB2、Mysql、MSServer;

2)數(shù)據(jù)庫(kù):按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)。3)數(shù)據(jù):

4)表(Table):數(shù)據(jù)庫(kù)中的表與我們?nèi)粘I钪惺褂玫谋砀耦愃疲彩怯尚校≧ow)和列(Column)組成的。

5)視圖:其實(shí)是一個(gè)虛擬的表,在數(shù)據(jù)庫(kù)中并不實(shí)際存在。視圖數(shù)據(jù)是由查詢數(shù)據(jù)庫(kù)表產(chǎn)生的,它限制了用戶能看到和修改的數(shù)據(jù)。

6)索引:索引是根據(jù)指定的數(shù)據(jù)庫(kù)表列建立起來(lái)的順序。它提供了快速訪問數(shù)據(jù)的途徑,并且可監(jiān)督表的數(shù)據(jù),使其索引所指向的列中的數(shù)據(jù)不重復(fù)。

7)存儲(chǔ)過程:存儲(chǔ)過程是為完成特定的功能而匯集在一起的一組SQL程序語(yǔ)句,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中的SQL程序。

8)觸發(fā)器:觸發(fā)器是一個(gè)用戶定義的SQL事務(wù)命令的集合。當(dāng)對(duì)一個(gè)表進(jìn)行插入、更改、刪除時(shí),這組命令就會(huì)自動(dòng)執(zhí)行。9)ER圖:實(shí)體關(guān)系圖10)范式:

第一范式:數(shù)據(jù)庫(kù)表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng);第二范式:要求實(shí)體的屬性完全依賴于主關(guān)鍵字primarykey:SelectCourse表(學(xué)號(hào),姓名,年齡,課程名稱,成績(jī),學(xué)分)1、數(shù)據(jù)冗余2、更新異常3、插入異常4、刪除異常

第三范式:數(shù)據(jù)表中如果不存在非關(guān)鍵字段對(duì)任一候選關(guān)鍵字段的傳遞函數(shù)依賴;

11)事務(wù)特性:原子性、一致性、隔離性、持久性

設(shè)置oracle事務(wù)隔離界別:

settransactionisolationlevelserializable;未提交讀:事務(wù)A可以讀取事務(wù)B未提交的數(shù)據(jù)。提交讀:事務(wù)A只能讀取事務(wù)B提交了的數(shù)據(jù)

可重復(fù)讀:在同一個(gè)事務(wù)A里,先后執(zhí)行同一個(gè)查詢語(yǔ)句,得到的結(jié)果是一樣的。

序列化讀:事務(wù)A在執(zhí)行的時(shí)候不允許其他事務(wù)的執(zhí)行,隔離級(jí)別最高。12)SQL:結(jié)構(gòu)化查詢語(yǔ)言,是操作關(guān)系型數(shù)據(jù)庫(kù)中的對(duì)象。

二、SQL語(yǔ)句

SQLStatement(SQL語(yǔ)句)

1)DDLDataDefinationLanguage數(shù)據(jù)庫(kù)定義語(yǔ)言create,alter,drop,truncate

2)DMLDataManagementLanguage數(shù)據(jù)庫(kù)操縱語(yǔ)言insert,upate,delete

3)DCLDataControlLanguage數(shù)據(jù)庫(kù)控制語(yǔ)言grantrevoke

4)TCLTransactionControlLanguage)數(shù)據(jù)庫(kù)事務(wù)控制語(yǔ)言commit,rollback,savepoint5)Select數(shù)據(jù)庫(kù)查詢語(yǔ)句Select

三、數(shù)據(jù)庫(kù)查詢

1、查詢操作

1)投影操作只查詢表的某些字段如:selectname,birthdayfromstudent;2)關(guān)聯(lián)操作多個(gè)表操作

3)選擇操作根據(jù)條件篩選記錄,可認(rèn)為是添加了where子句

2、查詢語(yǔ)句

select[dintinct]{*,column[alias],}fromtablename;1)投影操作

①selecttable_namefromuser_tables;查詢系統(tǒng)表②desc表名;查看表的結(jié)構(gòu)③去重復(fù)數(shù)據(jù)distinct

例:selectdistinctdept_id,titlefroms_emp;

這樣寫的話,distinct會(huì)管到后面的所有字段,即對(duì)所有字段排序后,再排重。即排重的是dept_id和title的組合。

在select語(yǔ)句中可以使用數(shù)學(xué)表達(dá)式。

selectfirst_name,salary*12froms_emp;④別名,三種方法

1、selectfirst_namenamefroms_emp;2、selectfirst_nameasnamefroms_emp;

3、selectfirst_name"firstname"froms_emp;如果別名中有空格或大小寫敏感,要把雙引號(hào)括起來(lái);父查詢可調(diào)用子查詢的別名,當(dāng)前查詢調(diào)用當(dāng)前別名需要看執(zhí)行順序;雙引號(hào)別名調(diào)用時(shí)仍需雙引號(hào)但是內(nèi)部字母區(qū)分大小寫;且識(shí)別空格,有多少是多少;多個(gè)空格在顯示時(shí)只有一個(gè)空格,無(wú)空格則不顯示,這是和使用相區(qū)別;只有雙引號(hào)中能添加空格;若別名中有空格則加上””⑤字符串拼接使用||符號(hào)

selectfirst_name||’’||last_namefroms_emp;(||’’||無(wú)論哪里出現(xiàn)空格都對(duì)拼接無(wú)障礙且無(wú)空格顯示)

⑥空值的處理---nvl(column,defaultvalue)函數(shù)

selectfirst_name,12*salary*(1+nvl(commission_pct/100,0))froms_emp;nvl函數(shù)是指當(dāng)?shù)谝粋(gè)參數(shù)column如果為空(null值)的話,Oracle就會(huì)默認(rèn)為第二個(gè)參數(shù)defaultvalue的值,如果第一個(gè)參數(shù)不為空的話,就選擇第一個(gè)參數(shù)本身的值。

內(nèi)容區(qū)分大小寫;

2)選擇操作:

①排序orderby字段|別名|字段位置升序(asc)|降序(desc)

selectfirst_name,salaryfroms_emporderbysalary;默認(rèn)的是升序②排序字段的空值處理

降序時(shí)null值排在前,升序時(shí)null排在后

selectfirst_name,salaryfroms_emporderbyfirst_name,salarydesc;按first_name升序排序,如果first_name相同,再按salary排序能夠觸發(fā)排序的關(guān)鍵字:distinct、orderby、groupby

3、where子句

where子句使用在select...from...后面,用來(lái)選擇所需(符合條件的)的記錄where后面跟的是表達(dá)式也就是XXX=XXX,XXXbetweenXandX,XXXin(X,X,X),like"..."等

請(qǐng)注意selectcolumnsfromtablewhereclause

是先f(wàn)rom表再where條件,最后select出你要的字段。非數(shù)字類單引號(hào)引用;

1)通配查詢

between...and...表示結(jié)果在這區(qū)間之間,betweenand是一個(gè)閉區(qū)間,也就相當(dāng)于...=...。

!=,,^=,這三個(gè)都是指不等于,且=,=,這些運(yùn)算符也可以使用。

in(va1,val2,...)表示判斷結(jié)果是否在這個(gè)枚舉中存在,即每一個(gè)值都去匹配

like表示字符串通配查詢,"%"表示任意多個(gè)字符,"_",表示任意一個(gè)字符。注意:轉(zhuǎn)義的用法:like‘S\\_%’escape‘\\’;

escape指定義什么是轉(zhuǎn)義符,可以是任意的特殊符號(hào),包括數(shù)字和字符串,但數(shù)字和字符串要是定義為轉(zhuǎn)義符會(huì)不會(huì)對(duì)操作造成影響需要考慮考慮。

2)邏輯符

and表示只有兩個(gè)或多個(gè)條件同時(shí)滿足。or表示條件只要滿足其中只一就可以。all表示條件都滿足時(shí)。

not表示是可以與以上的條件產(chǎn)生反效果。

空值會(huì)對(duì)notin造成影響,也就是不等于任何值,但是空值例外,空值跟任何值比較都為空。notin不包含空值,null不被算在內(nèi)。不包含在里面的值可能是有空值但是空值會(huì)被notin排除在。isnull表示判斷值是否為空。

注意:Oracle中的字符串是嚴(yán)格區(qū)分大小寫的。這里所謂的字符串是指數(shù)據(jù)表中的數(shù)據(jù)(信息)。

select{*,column[s][alias],...}在這里實(shí)現(xiàn)投影操作fromtable_name

[whereclause]查詢條件注意:[]表示這部分內(nèi)容可有可無(wú)[orderbycolumns(asc|desc)]排序子句

注意:[]表示這部分內(nèi)容可有可無(wú);(|)選擇其一

四、單行函數(shù)

1、字符函數(shù)

lower(字段名)表示轉(zhuǎn)小寫,其中的參數(shù)可以是一個(gè)字符串常量或是一個(gè)字段名upper(字段名)表示轉(zhuǎn)每個(gè)單詞首字母大寫;initcap(字段名)表示首字母大寫;

concat(字段1,字段2)表示字符串拼接;(||’‘||)

substr(字段名,起始位置,取字符個(gè)數(shù))表示截取字符子串,位置是從1開始length(字段名)表示該字段的字符長(zhǎng)度,打出字符串長(zhǎng)度

例:selectsubstr(first_name,-2,2)subfroms_emp;(取后兩個(gè))selectsubstr(first_name,2,2)subfroms_emp;(取前兩個(gè))使用"-"表示取后面的字符串,取的時(shí)候仍是從左往右取。

2、數(shù)值函數(shù)

round(數(shù)據(jù),保留小數(shù)點(diǎn)后幾位)表示四舍五入

可以用負(fù)數(shù)表示小數(shù)點(diǎn)前,0,表示小數(shù)點(diǎn)后第一位,也就是保留個(gè)位,-1表示個(gè)位(保留到十位);小數(shù)點(diǎn)后面的位數(shù)可以為負(fù)數(shù);從小數(shù)點(diǎn)處開始數(shù),向左為負(fù),向右為正。

例:selectround(15.36,1)fromdual;

trunc(數(shù)據(jù),保留的位數(shù)(小數(shù)點(diǎn)后位數(shù)))表示截取數(shù)字函數(shù),截取個(gè)位之后補(bǔ)0;小數(shù)點(diǎn)后面的位數(shù)可以為負(fù)數(shù);從小數(shù)點(diǎn)處開始數(shù),向左為負(fù),向右為正。在邊截取整數(shù)位數(shù)字后補(bǔ)零;

例:selecttrunc(123.456,1)fromdual;

3、日期函數(shù)

日期格式,全日期格式世紀(jì)信息,年月日,時(shí)分秒。缺省日期格式,日-月-年dd-mon-rr

修改當(dāng)前會(huì)話的日期格式,會(huì)按照指定的格式輸出日期

altersessionsetnls_date_format="yyyymmddhh24:mi:ss";返回當(dāng)前日期sysdate

例:selectsysdatefromdual;

selectsysdate+1fromdual;獲得明天的日期,加1,單位是天日期是格式敏感的日期內(nèi)置函數(shù):

months_between(sysdate,addmonth(sysdate,5))//兩個(gè)月有多少天。add_months(sysdate,-5)在系統(tǒng)時(shí)間基礎(chǔ)上延遲5月add_months(sysdate,-5*12)在系統(tǒng)時(shí)間基礎(chǔ)上延遲5年last_day(sysdate)一個(gè)月最后一天

next_day(sysdate,’Friday’)下個(gè)星期星期幾

round(sysdate,’day’)不是四除五入,是過了中午的留下,不過的略掉trunc(sysdate,’month’)不到一月的都省略例:

round("25-MAY-95","MONTH")01-JUN-95round("25-MAY-95","YEAR")01-JAN-95trunc("25-MAY-95","MONTH")01-MAY-95trunc("25-MAY-95","YEAR")01-JAN-95

4、不同數(shù)據(jù)類型間轉(zhuǎn)換函數(shù)

將字符轉(zhuǎn)換成數(shù)字to_number("...")

將數(shù)字轉(zhuǎn)字符to_char(number,"fmt")fmt是數(shù)字格式將字符串轉(zhuǎn)成日期to_date("...","日期格式")例:selectto_char(to_date("201*1103","yyyymmdd"),"dd-month-yy")fromdual;

selectto_char(3456.789,"9,999.999")fromdept;變成一個(gè)字符串的格式,9是一種顯示格式,運(yùn)行結(jié)果3,456.789除了9之外還可以寫0,本位上有的話直接寫,沒有的話補(bǔ)0

selectto_char(3456.78,"000,000.000")fromdept;運(yùn)行結(jié)果003,456.780selectto_char(3456.78,"fm$99,000.000")fromdept;去除前面的空格

selectto_number("123.4")+3fromdept;有默認(rèn)的轉(zhuǎn)換即去掉to_number,不同類型的轉(zhuǎn)換可以強(qiáng)行也可以自動(dòng)(不是所有的都可以)

格式是9時(shí):9的整數(shù)個(gè)數(shù)不能小于數(shù)字的整數(shù)位數(shù),小數(shù)部分沒有的話會(huì)補(bǔ)00時(shí):0的整數(shù)個(gè)數(shù)不能小于數(shù)字的整數(shù)位數(shù),前后沒有的都補(bǔ)0

改變NLS_LANG的值讓輸出結(jié)果的貨幣單位是¥或$,需修改環(huán)境變量,臨時(shí)的即可

setenvNLS_LANG"SIMPLIFIEDCHINESE_CHINA.ZHS16GBK"setenvNLS_LANG"AMERICAN_AMERICA.US7ASCII"

在XP系統(tǒng)的瀏覽器或Oracle的PLSQL中可使用下面指令修改語(yǔ)言環(huán)境,之后并且要輸入commit提交:

ALTERSESSIONSETNLS_LANGUAGE=american;

ALTERSESSIONSETNLS_LANGUAGE="SIMPLIFIEDCHINESE";5、關(guān)聯(lián)操作①等值查詢:表之間的連接是通過相等的字段值連接起來(lái)的查詢稱為等值連接查詢。

查詢員工的名稱,部門名稱,地區(qū)名稱

selecte.first_name,d.name,r.namefroms_empe,s_deptd,s_regionrwheree.dept_id=d.idandd.region_id=r.id;查詢ben在那個(gè)部門那個(gè)地區(qū)上班

selecte.first_name,d.name,r.namefroms_empe,s_deptd,s_regionrwheree.dept_id=d.idandd.region_id=r.idandlower(e.first_name)="ben";

②非等值連接:連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符,比較被連接的列的列值。這些運(yùn)算符包括>、>=、e,s_empmwheree.manager_id=m.id(+);有(+)表示本方會(huì)為對(duì)方補(bǔ)空值注意條件(+)跟在要全部選出的一方,即一方比一方多余的記錄要輸出的加(+),不能使用in和or;

fromt1,t2wheret1.c1=t2.c2(+)把t1表中匹配不上的記錄重新找回來(lái)

fromt1,t2wheret1.c1(+)=t2.c2把t2表中匹配不上的記錄重新找回來(lái)Selfjoin自連接Fromt1,t2

Wheret1。C1=t2。C2(innerjoin)Fromt1,t2

Wheret1。C1=t2。C2(+)(outerjoin)T1表中匹配不上的記錄找回來(lái)Wheret1。C1(+)=t2。C2T2表中匹配不上的記錄找回來(lái)Outerjoin=innerjoin+匹配不上來(lái)的;

五、組函數(shù)

1、groupby表示分組函數(shù),having表示對(duì)查詢結(jié)果進(jìn)行過濾

where子句用來(lái)篩選from子句中指定的操作所產(chǎn)生的行,不能跟組函數(shù)groupby子句用來(lái)分組where子句的輸出having子句用來(lái)從分組的結(jié)果中篩選行2、組函數(shù)

a)avg查詢平均值

b)count查詢記錄條件,參數(shù)可以是任何類型,忽略空值;多少條記錄不包含空值;

c)max查詢最大值,字符串從左邊第一個(gè)開始比,第一相同就比第二個(gè),第一個(gè)不相同大的徘前面;d)min查詢最小值

e)sum查詢數(shù)字的和,貌似只用于數(shù)字,反正字符串不能用;所有組函數(shù)的計(jì)算都會(huì)忽略空值avg、sum只能用于數(shù)值類型3、注意:groupby子句也會(huì)觸發(fā)排序操作,會(huì)按分組字段排序,即使用orderby查詢提成平均值

selectavg(nvl(commission_pct,0))froms_emp;查詢員工分布在幾個(gè)不同的部門

selectcount(distinctdept_id)froms_emp;查詢42部門的平均工資

selectavg(salary)salaryfroms_empwheredept_id="42";查詢不同部門的平均工資

selecte.dept_id,avg(salary)froms_empegroupbye.dept_id;查詢不同部門不同職位的平均工資

selecte.dept_id,e.title,avg(salary)froms_empegroupbye.dept_id,e.title;

注意:當(dāng)使用groupby語(yǔ)句時(shí),select后面的只能是組函數(shù)和groupby后面的字段,若不使用groupby語(yǔ)句時(shí),select后面的可以是普通字段或者全部是組函數(shù)

查詢不同部門不同職位的平均工資(要求顯示部門名稱)

selectd.name,e.title,avg(salary)froms_empe,s_deptdwheree.dept_id=d.idgroupbyd.name,e.title;

查詢不同部門的平均工資(要求顯示部門名稱)根據(jù)部門編號(hào)和部門名稱分組selecte.dept_id,d.name,avg(salary)froms_empe,s_deptdwheree.dept_id=d.idgroupbye.dept_id,d.name;求42部門的平均工資

selecte.dept_id,max(d.name),avg(salary)froms_empe,s_deptdwheree.dept_id=d.idandd.id=42groupbye.dept_id

4、SQL結(jié)構(gòu)

SELECT{*,COLUMN1[ALIAS1],...}FROMTABLE_NAME

[WHERECLAUSE]查詢條件GROUPBYHAVING

[ORDERBYCLAUSE]排序子句

5、子查詢:就是可以嵌在任何的sql語(yǔ)句中的select語(yǔ)句,把子查詢的結(jié)果當(dāng)做范圍再區(qū)查詢一遍

在select語(yǔ)句中嵌套子查詢時(shí),會(huì)先執(zhí)行子查詢。一般的會(huì)將子查詢放在運(yùn)算符的右邊

注意:在使用子查詢時(shí),要注意這個(gè)運(yùn)算符是單行的(也就是只能是單值),還是多行運(yùn)算符(范圍,多值,in)。配合使用子查詢返回的結(jié)果必須符合運(yùn)算符的用法

查詢和smith做同樣工作的員工

selectlast_namefroms_empwheretitle=(selecttitlefroms_empwherelower(last_name)="smith")andlower(last_name)"smith";

selectlast_namefroms_empwheretitlein(selecttitlefroms_empwherelower(last_name)="smith")andlower(last_name)"smith";如果能保證子查詢結(jié)果為單值可以用=,如果不確定可以用in

查詢大于32部門平均工資部門的平均工資

selectdept_id,avg(salary)froms_empgroupbydept_idhavingavg(salary)>(selectavg(salary)froms_empwheredept_id=32);查詢哪些人不是領(lǐng)導(dǎo)

selectfirst_namefroms_empwhereidnotin(selectmanager_idfroms_empwheremanager_idisnotnull);哪些員工的工資和本部門的平均工資一樣

selectfirst_name,dept_id,salaryfroms_empwhere(dept_id,salary)in(selectdept_id,avg(salary)froms_empgroupbydept_id);

6、rownum實(shí)現(xiàn)分頁(yè)oracle查詢前十條語(yǔ)句select*from(

selectA.*,rowmunrnfrom(select*froms_emp)Awhererowmun=1;查詢10~20條記錄select*from(

selecta.*,rownumrnfrom(select*froms_emp)a)

wherernbetween10and20;

From,where后面可以跟子查詢:SELECTfirst_name,salary

FROMs_empt1,(SELECTdept_id,AVG(salary)avgsalaryFROMs_empgroupbydept_id)t2WHEREt1.dept_id=t2.dept_idANDt1.salary>t2.avgsalary;

rownum:對(duì)于一個(gè)查詢返回的每一行,rownum偽列返回一個(gè)數(shù)值代表的次序。rownum偽列特點(diǎn):

1)要么等于1要么小于某個(gè)值,不能直接等于某個(gè)值,不能大于某個(gè)值2)常用于分頁(yè)顯示

返回的第一行的rownum值為1,第二行的rownum值為2,依此類推。通過使用rownum偽列,用戶可以限制查詢返回的行數(shù)

如:select*froms_empwhererownum引用完整性約束

2、FK(ForeignKey外鍵約束)至少存在兩張表

把外鍵所在的表稱子表,其引用的表稱為父表,外鍵的一些規(guī)范約束,是在子表中設(shè)置外鍵,一定是與父表的主鍵對(duì)應(yīng)先建父表,后建子表先刪子表,再刪父表

3、UK(UniqueKey唯一約束)唯一可以為空4、notnull非空約束

所謂的約束是指在建表的時(shí)候?qū)ψ侄卧O(shè)置,當(dāng)插入(insert)數(shù)據(jù)時(shí)會(huì)根據(jù)約束對(duì)插入的數(shù)據(jù)進(jìn)行檢查,例如某一字段為notnull,若插入該字段的記錄(數(shù)據(jù))是一個(gè)null值,就會(huì)報(bào)擦插入數(shù)據(jù)錯(cuò)誤。把ER圖關(guān)系模式轉(zhuǎn)化成表關(guān)系:

一對(duì)多多的那邊做外鍵

多對(duì)多用中間表把兩個(gè)表連起來(lái),學(xué)生表---課程表是多對(duì)多關(guān)系,需要建立一個(gè)中間表,學(xué)生選課表,這個(gè)包含兩個(gè)表的主鍵做為它的自己的聯(lián)合主鍵一對(duì)一外鍵加個(gè)唯一約束范式

第一范式(1NF):在關(guān)系模式R中的每一種具體關(guān)系r中,如果每個(gè)屬性值都是不可再分的最小數(shù)據(jù)單位,則稱R是第一范式的關(guān)系。

第一范式簡(jiǎn)單的說(shuō)就是要求屬性具有原子性,不可以再分,第一范式面臨的問題?引出第二范式

第二范式(2NF):如果關(guān)系模式R(U,F)中的所有非主屬性都完全依賴于任意一個(gè)候選關(guān)鍵字(可以使組合式的主鍵),則稱關(guān)系R是屬于第二范式。

第二范式簡(jiǎn)單的說(shuō),就是每個(gè)表都有個(gè)主鍵,其他字段完全依賴于該主鍵,第二范式的問題?引出第三范式。

第三范式(3NF):如果關(guān)系模式R(U,F)中的所有非主屬性對(duì)任何候選關(guān)鍵字(即主鍵)都不存在傳遞依賴,則稱關(guān)系R是屬于第三范式。數(shù)據(jù)庫(kù)定義語(yǔ)言

a)數(shù)據(jù)庫(kù)對(duì)象:TableViewIndexSequenceb)建表定義表的數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)類型varchar(n)可變類型,按實(shí)際數(shù)據(jù)的長(zhǎng)度存儲(chǔ)char(n)定長(zhǎng),按定義的長(zhǎng)度存儲(chǔ)

number(m,n)數(shù)值類型,可以定義寬度,也可以不定義寬度,默認(rèn)缺省為38date日期類型,一定不能定義寬度

char類型是一個(gè)固定長(zhǎng)度的類型,會(huì)補(bǔ)空位;varchar和varchar2都是可變的,varchar是sql的標(biāo)準(zhǔn),再別的數(shù)據(jù)庫(kù)中都有,varchar2是oracle自身的標(biāo)準(zhǔn)。char類型最多的字符是4000個(gè)!

建表的時(shí)候請(qǐng)注意字段與字段之間用“,”分割,最后一個(gè)字段不需要“,”標(biāo)示,所謂字段如下的c1、c2等,數(shù)據(jù)是指數(shù)據(jù)表實(shí)際存在的信息,可通過insert、update等實(shí)現(xiàn)數(shù)據(jù)信息持久

createtablesunzw_test(-----------創(chuàng)建表c1varchar2(10),c2char(10),c3number(3),c4date);

insertintosunzw_testvalues("sunzw","123",200,to_date("201*11412:34:12","rrrrmmddhh24:mi:ss"));---要注意數(shù)據(jù)格式和精確度createtablesunzw_test(

c1varchar2(10)constraintssunzw_test_pk_c1primarykey,---把c1設(shè)為主鍵,列級(jí)約束c2char(10),c3number(3),c4date);

createtablesunzw_test(c1varchar2(10),c2char(10),c3number(3),c4date,

constraintssunzw_test_pk_c1primarykey(c1)---表級(jí)約束);

注意:定義聯(lián)合主鍵時(shí),只能用表級(jí)約束createtablesunzw_test(c1varchar2(10),c2char(10),c3number(3),c4date,

constraintssunzw_test_pk_c1(約束名可有可無(wú))primarykey(c1,c2));

約束

NOTNULL約束(這個(gè)字段不允許為空)

createtablesunzw_test(c1numbernotnull,c2number);---為c1定義了非空約束

NOTNULL約束只能定義為列級(jí)約束

UNIQUE唯一約束

createtablesunzw_test(c1numberprimarykey,c2numberunique);---為c2定義唯一約束

唯一約束可以為空,唯一約束不考慮空值聯(lián)合主鍵約束,這時(shí)只能用表級(jí)約束createtablesunzw_test(c1number,c2number,

unique(c1,c2)---c1和c2聯(lián)合唯一);

PRIMARYKEY(主鍵約束)非空且唯一的定義

createtablesunzw_test(c1numberprimarykey,c2number);

createtablesunzw_test(c1numbernotnull,c2number,unique(c1));createtablesunzw_test(c1numberuniquenotnull,c2number);

父表:

createtablesunzw_parent(C1numberprimarykey,C2number);子表:

createtablesunzw_child(C1numberprimarykey,

C2numberreferencessunzw_parent(c1)---C2是parent表的外鍵);

先建父表,再建子表

錯(cuò)誤

insertintosunzw_childvalues(1,1);---違反外鍵約束,因?yàn)楦副碇袥]有c1為1的記錄讓子表引用正確

insertintosunzw_parentvalues(1,1);---先插父表insertintosunzw_childvalues(1,1);---后插子表注意:刪除表時(shí),要先刪子表,再刪父表droptablesunzw_child;droptablesunzw_parent;或者

droptablesunzw_parentcascadeconstraints;級(jí)聯(lián)約束,這樣就刪掉了父表和子表的FK約束

表級(jí)約束定義格式

createtablesunzw_child(C1numberprimarykey,C2number,

foreignkey(c2)referencessunzw_parent(c1));

級(jí)聯(lián)刪除約束

createtablesunzw_child(C1numberprimarykey,

C2numberreferencessunzw_parent(c1)ondeletecascade---級(jí)聯(lián)刪除,刪除父表記錄時(shí),會(huì)級(jí)聯(lián)把子表中的記錄刪除);C2是parent表的外鍵

createtablesunzw_child(C1numberprimarykey,

C2numberreferencessunzw_parent(c1)ondeletesetnull---級(jí)聯(lián)刪除,刪除父表的記錄時(shí),會(huì)把子表中引用字段變?yōu)閚ull);

CHECK檢查約束(CK)定義一條件一約束字段列級(jí)定義:

createtablesunzw_child(C1numberprimarykey,C2numbercheck(c2>200));

表級(jí)定義:

createtablesunzw_child(C1numberprimarykey,

C2numbernotnull,---同check(c2isnotnull)和非空的效果一樣check(c2>200));

創(chuàng)建三張表學(xué)生表,課程表,選課表

droptablesunzw_studentcascadeconstraints;droptablesunzw_coursecascadeconstraints;droptablesunzw_stu_curcascadeconstraints;createtablesunzw_student(sidnumber(10)primarykey,namevarchar2(10),agenumber(2),sexvarchar2(2),birthdaydate);

createtablesunzw_course(cidnumber(10)primarykey,namevarchar2(50));

createtablesunzw_stu_cur(sidnumber(10),cidnumber(10),scorenumber(10),

primarykey(sid,cid),

foreignkey(sid)referencessunzw_student(sid),foreignkey(cid)referencessunzw_course(cid));

用已經(jīng)存在的表創(chuàng)建新的表createtablesunzw_empasselectid,first_name,last_name,salaryfroms_empwheredept_id=41;

只會(huì)把非空約束帶過來(lái),其他的約束在建新表時(shí)會(huì)自動(dòng)消掉,所以除非空約束外,其他約束還要自己再加,符合的數(shù)據(jù)也帶過來(lái)復(fù)制表的結(jié)構(gòu)

createtablesunzw_empasselectid,first_name,last_name,salaryfroms_empwhere1=2;

1=2表示只取表結(jié)構(gòu),不要表中數(shù)據(jù)的建表方式,即表中的數(shù)據(jù)記錄

DROPTABLE刪除表

droptablesunzw_test1cascadeconstraitns;---刪除表時(shí)級(jí)聯(lián)刪除這個(gè)表的約束

TRUNCATETABLEtablename;TRUNCATE比DROP快,在刪除一個(gè)表中的全部數(shù)據(jù)時(shí),須使用TRUNCATETABLE表名;因?yàn)橛肈ROPTABLE或DELETEFROM表名時(shí),TABLESPACE表空間該表的占用空間并未釋放,反復(fù)幾次DROP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了

truncatetable刪除表中所有記錄,并釋放其占用的空間,執(zhí)行快數(shù)據(jù)不可恢復(fù)(不能commit)

deletefrom刪除表中所有記錄,不釋放其占用的空間,執(zhí)行慢

七、數(shù)據(jù)操縱語(yǔ)言(DML)

1、INSERT

INSERT一次只能插一條

INSERTINTOtablenmaeVALUES(colvalue,colvalue,);

INSERT語(yǔ)句中可以放函數(shù)inserttablenamevalues(12,sysdate)

INSERT可以只插入某個(gè)列的值,INSERTintotablenmae(sunzw_emp(列名))values(列值)

INSERT可能違反各種約束

2、UDPATE

UPDATEtablenameSETcolumn=value,column=valueWHEREcondition注意:如果不加where條件,修改可影響到所有的記錄,所有記錄將被修改只能一條一條跟新3、DELETE

DELETEFROMtablenameWHEREcondition;

用DELETE刪除一張表的記錄,刪除之后,數(shù)據(jù)還能找回來(lái)

更多關(guān)于DML的寫作規(guī)范及約束參考SQL語(yǔ)句.doc八、數(shù)據(jù)庫(kù)事務(wù)控制語(yǔ)言

銀行轉(zhuǎn)賬:A賬戶向B賬戶轉(zhuǎn)賬1000

Createtablesunzw_balance(idnumber(10),balancenumber(10));insertintosunzw_balancevalues(1,150000);insertintosunzw_balancevalues(2,40000);1向2轉(zhuǎn)賬10001如何轉(zhuǎn)賬:

updatesunzw_balancesetbalance=balance-1000whereid=1;updatesunzw_balancesetbalance=balance+1000whereid=2;

服務(wù)器中斷服務(wù)以及其它的原因都可能導(dǎo)致更新一個(gè)賬戶后,另一個(gè)賬戶沒有更新

如何保證兩個(gè)操作同時(shí)成功,同時(shí)失敗呢?要用事務(wù)來(lái)保證

updatesunzw_balancesetbalance=balance-1000whereid=1;updatesunzw_balancesetbalance=balance+1000whereid=2;commit|rollback;

commit提交將更新的數(shù)據(jù)保存到數(shù)據(jù)rollback回滾將數(shù)據(jù)恢復(fù)到修改前的狀態(tài)savepoint保存點(diǎn)

savepointpoint1;創(chuàng)建一個(gè)保存點(diǎn)

rollbacktopoint1;回滾到指定的保存點(diǎn)

注意:做DML操作中注意要提交或回滾事務(wù)DDL,DCL會(huì)自動(dòng)做提交操作

數(shù)據(jù)庫(kù)事務(wù)是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作事物的四個(gè)特性atomic原子性

事務(wù)必須是原子工作單元;對(duì)于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行

consistent一致性

事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài)insulation隔離性

由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。事務(wù)查看數(shù)據(jù)時(shí)數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會(huì)查看中間狀態(tài)的數(shù)據(jù)Duration持久性

事務(wù)完成之后,它對(duì)于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持

事務(wù)能夠保證相關(guān)的一組事務(wù)一起成功或一起失敗有兩種級(jí)別的事務(wù):

局部事務(wù)(數(shù)據(jù)庫(kù)的操作都是針對(duì)一個(gè)數(shù)據(jù)庫(kù)的同一個(gè)用戶)全局事務(wù)(分布式事務(wù))(數(shù)據(jù)庫(kù)操作是針對(duì)多個(gè)數(shù)據(jù)庫(kù)或則一個(gè)數(shù)據(jù)庫(kù)的不同用戶下的表)

九、索引、序列、視圖

sequence給table解決pk問題

index給table解決select效率問題view看table的子集和超集

sequence,index,view都為table服務(wù),

如果把表刪了,index就刪掉了,view會(huì)變成無(wú)效

1、偽列

偽列就像Oracle中的一個(gè)表列,但實(shí)際上它并未存儲(chǔ)在表中。偽列可以從表中查詢,但是不能插入、更新或刪除它們的值,常用的偽列:rowid和rownumrowid系統(tǒng)提供的偽列表示記錄的真實(shí)物理位置?梢允褂胷owid值來(lái)定位表中的一行,通常情況下,rowid值可以唯一地標(biāo)識(shí)數(shù)據(jù)庫(kù)中的一行rowid偽列有以下重要用途:

1)能以最快的方式訪問表中的一行2)能顯示表的行是如何存儲(chǔ)的3)可以作為表中行的唯一標(biāo)識(shí)

如:selectrowid,first_namefroms_emp;createtables_info_c(idnumber(3)primarykey,namevarchar2(10),agenumber(3));

insertintos_info_cvalues(1,"zhang",23);insertintos_info_cvalues(2,"sun",24);insertintos_info_cvalues(3,"liu",30);insertintos_info_cvalues(4,"sun",23);insertintos_info_cvalues(5,"zhang",21);刪除所有重復(fù)的記錄

deletefroms_info_cwherenamein(

selectnamefroms_info_cgroupbynamehavingcount(*)>1);

刪除重復(fù)記錄并保留其中一條記錄,下面的效率不高,通過自建一個(gè)副本操作,面試?

deletefroms_info_cawhereid>(selectmin(id)froms_info_cbwherea.name=b.name);高效率

deletefroms_info_cawhererowid>(selectmin(rowid)froms_info_cbwherea.name=b.name);

rownum:對(duì)于一個(gè)查詢返回的每一行,rownum偽列返回一個(gè)數(shù)值代表的次序。rownum偽列特點(diǎn):1)有個(gè)特點(diǎn)要么等于1要么小于某個(gè)值,不能直接等于某個(gè)值,不能大于某個(gè)值

2)常用于分頁(yè)顯示

返回的第一行的rownum值為1,第二行的rownum值為2,依此類推。通過使用rownum偽列,用戶可以限制查詢返回的行數(shù)

如:select*fromempwhererownum注:PK和UK系統(tǒng)在建表的時(shí)候會(huì)自動(dòng)建立索引

查詢結(jié)果集很大重建索引

alterindexsunzw_index_namerebuild;

根據(jù)現(xiàn)有的索引重建一個(gè)新的索引,比刪掉索引重新建立索引要快,但是有空間消耗

查詢表上的索引

selectindex_name,index_type,uniquenessfromuser_indexeswheretable_name="SUNZW_STUDENT";

刪除索引,例從未出現(xiàn)過where子句,不經(jīng)常使用的最好刪除,降低維護(hù)開銷dropindexsunzw_index_name;

表達(dá)式(wherec1_1=1)或函數(shù)(whereround(c1)=1)會(huì)導(dǎo)致索引用不了,因?yàn)樗饕镉涗浀氖亲侄蔚闹,可以建基于函?shù)或表達(dá)式的索引,但這樣對(duì)索引做操作時(shí)目的是全表掃描

Createindextest_indexonsalary+1000

建索引createindextest_c1_indontest(c1)

FTSfulltablescan全表掃描:讀出所有記錄一個(gè)一個(gè)的匹配基于index的掃描

Rowid代表一條記錄的物理位置(包含一條記錄是屬于哪張表(屬于哪個(gè)Objectobject_id),是屬于哪個(gè)數(shù)據(jù)文件的(file_id)是屬于這個(gè)文件里德哪個(gè)數(shù)據(jù)塊(block_id)在這個(gè)block中的第幾條記錄(row_id))

索引時(shí)是樹形其中自有葉子是存放的值和rowID,查找類似二叉樹通過rowid快速檢索

降低IO數(shù)量

維護(hù)索引(update太多的表不宜建索引)

索引太多會(huì)降低效率因?yàn)橐S護(hù)

Alterindextest_c1_indrebuild;(dropindexandcreateindex)兩個(gè)效果一樣,前這快但占空間大,后者慢占空間小從不用來(lái)定位的索引需刪掉

如果把表刪了,索引一定會(huì)被刪了

PKuk上是一定會(huì)有索引的,你不建數(shù)據(jù)庫(kù)會(huì)建索引里沒有Null,null必須全表掃描

索引一般條件:經(jīng)常會(huì)出現(xiàn)在連接字段例如FK,

經(jīng)常出現(xiàn)在where后面的

取值范圍特別大的(bitmapindex小指索引用得很少)字段里有很多null;

表越大結(jié)果集越小索引效果越好(大前提)

索引不一定快,索引是手段不合適條件:表比較小

不經(jīng)常使用的反復(fù)修改的應(yīng)該dropindex的是:從未出現(xiàn)在where里面的索引類型:

唯一性索引:PKUkCreateuniqueindexxxxontest(c1)對(duì)表進(jìn)行更新時(shí)重復(fù)值會(huì)報(bào)錯(cuò)用來(lái)解決唯一性問題非唯一性索引:?jiǎn)瘟兴饕?/p>

加快查詢效率

索引用不了:where后面跟表達(dá)式wherec1+0=1

Where后面跟函數(shù)whereround(c1)=1實(shí)在要用可根據(jù)函數(shù)或表達(dá)式建索引

Wherec1=‘1’,c1number能用

Wherec1=1.c1varchar2(10)不能用隱式轉(zhuǎn)換用到函數(shù)Wheresubstr(c1,1,2)=‘a(chǎn)b’不能用因?yàn)楹瘮?shù)Wherec1like‘a(chǎn)b%’能用,這是范圍掃描

3、VIEW視圖

視圖就相當(dāng)于一條select語(yǔ)句,定義了一個(gè)視圖就是定義了一個(gè)sql語(yǔ)句,視圖不占空間,使用視圖不會(huì)提高性能視圖的作用:1)簡(jiǎn)化sql編寫

2)限制數(shù)據(jù)庫(kù)的訪問權(quán)限,保證表數(shù)據(jù)安全創(chuàng)建視圖:

createview視圖名;

Createviewxxxasselect*fromtestwherec1=1;可以descviewnameSelect*fromviewname

如:

createorreplaceviewtestasselect*fromtest1wherec1=1;createorreplace:如果view存在就覆蓋,不存在才創(chuàng)建force|noforce:基表存在時(shí)使用,不存在時(shí)則創(chuàng)建該表

注意:向視圖中插入數(shù)據(jù)時(shí),會(huì)直接插進(jìn)基表中,查看視圖中的數(shù)據(jù)時(shí),相當(dāng)于就是執(zhí)行創(chuàng)建時(shí)的select語(yǔ)句刪除視圖:

dropview視圖名;視圖的約束:

withreadonly視圖只讀約束

withcheckoption不允許插入與where條件不符的記錄,類似于check約束的功能

createviewtest_ccas

select*fromtestwherec1>10

withcheckoptionconstraintstest_check_op;聯(lián)合索引:createindexxxxxxontest(c1,c2)

聯(lián)合外建聯(lián)合主鍵經(jīng)常出現(xiàn)where。。。and。。。。需要建如果視圖存在表不存視圖無(wú)法使用

建表Createtabletest(c1number,c2number)Alterviewviewnamecompile自動(dòng)做編譯視圖Selectcount(*)fromtest

SelectUser_viewsfromuser_viewswhereview_name=’viewname’可以看到視圖定義

Selectobject_name,statusfromUser_objectswhereobject_name=‘viewname’可以看到視圖狀態(tài)

Createviews_empasselect*fromhiloo。S_emp;hiloo擁有該表的賬戶Grantselectons_emptosd1007(所在賬戶)

Default字段不會(huì)為空,你不提供他會(huì)自己添加Oltp在線處理事務(wù)系統(tǒng)

4、Sequence序列

createsequencesunzw_s1;

selectsunzw_s1.nextvalfromdual;selectsunzw_s1.currvalfromdual;

創(chuàng)建一個(gè)sequence之后,先用sunzw_s1.nextval取一次,才能取到sunzw.s1.currval;

Sequence是個(gè)可共享的對(duì)象,多個(gè)表可以共用一個(gè),用來(lái)產(chǎn)生主鍵值createsequencenameincrementbyn//步長(zhǎng)startwithn開始值maxvaluen最大值

cycle|nocycle表示達(dá)到最大值后從頭開始cachen|nocache指定cache的值。如果指定CACHE值,oracle就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動(dòng)再取一組到cache。使用cache或許會(huì)跳號(hào),比如數(shù)據(jù)庫(kù)突然不正常down掉(shutdownabort),cache中的sequence就會(huì)丟失,所以可以在createsequence的時(shí)候用nocache防止這種情況。

order;--指定排序

selectsequence_name,cache_size,last_numberfromuser_sequenceswheresequence_namelike"SUNZW_S1";

查詢sequence的是不用緩存,緩存是指在sequence一次取多個(gè)數(shù)據(jù)放在內(nèi)在中

修改sequence

altersequencenameincrementbyn;刪除sequence

dropsequenceseqname;

隔離級(jí)別

四種讀的情況:dirty-read臟讀,committedread重復(fù)讀,repeatableread序列讀,serializableread(或是幻影phantomread)dirty-read:一個(gè)數(shù)據(jù)還沒有提交就能讀到

Committedread:一個(gè)事物提交了另一個(gè)事物才能讀到

Repeatableread:一個(gè)事物更改了一個(gè)記錄并提交后另一個(gè)事物仍然讀到修改前的記錄(oracle中沒有隔離級(jí)別支持它。。﹑hantomread:一個(gè)事物提交增加了一個(gè)記錄,另一事物前后兩次要求讀取相同oracle數(shù)據(jù)庫(kù)只有serializableread和Committedread

設(shè)置更高的隔離級(jí)別---settransactionisolationlevelserializable;此時(shí)在別的事物中更改記錄,改事物中記錄仍是原記錄

集合

union/unionall并集;union會(huì)去掉相交集合中的重復(fù)值,unionall不會(huì)去掉相交集合中的重復(fù)值,無(wú)論集合是否有交集union都會(huì)做去重的操作

selects.first_name,m.first_namefroms_empe,s_empmwheree.manager_id=m.idunionall

selectfirst_namefroms_empwheremanager_idisnullintersect交集也會(huì)自動(dòng)去掉重復(fù)值minus

casewhen函數(shù)

selectfirst_name,salary,

casewhendept_id=31thensalary*1.1whendept_id=32thensalary*1.2whendept_id=33thensalary*1.3elsesalary

endasaft_salfroms_emp;

如果不在選擇范圍內(nèi)則返回原值

decode函數(shù)

selectfirst_name,salary,

decode(dept_id,31,salary*1.1,32,salary*1.2,

33,salary*1.3)asaft_sal(可以少as)froms_emp;

如果不在選擇范圍內(nèi)則返回空,格式:

decode(字段,條件1,結(jié)果1[,條件2,結(jié)果2])

selectfirst_name,max(salary),

max(decode(dept_id,31,salary*1.1))dept_31,max(decode(dept_id,32,salary*1.2))dept_32,max(decode(dept_id,33,salary*1.3))dept_33froms_emp

groupbyfirst_name;

EXISTS一檢測(cè)到符合的就返回執(zhí)行下一個(gè)manager_idSELECTlast_name,id,dept_idFROMs_empouterWHEREEXISTS(

SELECT"X"FROMS_EMP

WHEREmanager_id=outer.id);SELECTdnameFROMdeptwwWHEREEXISTS(SELECT9

FROMemp

WHEREdeptNO=ww.deptNO);

NOTEXISTS;原理與EXISTS相同有相同的就返回,只是一個(gè)是返回一個(gè)是過濾;繼續(xù)執(zhí)行下面的SELECTdnameFROMdeptww

WHEREEXISTS(SELECT9FROMemp

WHEREdeptNO=ww.deptNO);

差別在于帶not的有結(jié)果要求全部不相同,另一個(gè)只要有一個(gè)相同的就行EXISTS一檢測(cè)到符合的就返回執(zhí)行下一個(gè)manager_idSELECTlast_name,id,dept_idFROMs_empouterWHEREEXISTS(

SELECT"X"FROMS_EMP

WHEREmanager_id=outer.id);SELECTdnameFROMdeptwwWHEREEXISTS(SELECT9

FROMemp

WHEREdeptNO=ww.deptNO);

NOTEXISTS;原理與EXISTS相同有相同的就返回,只是一個(gè)是返回一個(gè)是過濾;繼續(xù)執(zhí)行下面的SELECTdnameFROMdeptwwWHEREEXISTS(

SELECT9FROMemp

WHEREdeptNO=ww.deptNO);

差別在于帶not的有結(jié)果要求全部不相同,另一個(gè)只要有一個(gè)相同的就行

字段名之間用逗號(hào)隔開表名與表名之間用逗號(hào)隔開

Selectname,jobfromyuangong,bumeng(name在yuangong表里,job在bumeng表里,兩張表里都有員工號(hào))出現(xiàn)笛卡爾積每張表里各取一條信息相互匹配;

重復(fù)的字段名必須指出出處,且只能用表別名,前面用表別名where處也要用表別名,FORM處不用表別名where處也可以不用;字段別名不可用

=注意等號(hào)位置等號(hào)位置和字段無(wú)關(guān)Count(*)統(tǒng)計(jì)記錄數(shù),有空值Count(dde)無(wú)空值記錄數(shù);有列名

Where后面只能跟單行函數(shù),組函數(shù)不可以因?yàn)閣here子句過濾的是記錄

Having后面跟的是組函數(shù)

先執(zhí)行子查詢,當(dāng)子查詢返回多個(gè)值時(shí),完成去重,然后將結(jié)果返回主查詢,再執(zhí)行主查詢?cè)O(shè)

置變量

setenv

NLS_LANG.S/MPLIFID.CHINESE_CHINA.2HS16GBK?默認(rèn)設(shè)置setenvNLS_LANG.USTASCⅡ

WHERE必須在GROUPBY前面SELECT后面有一個(gè)組函數(shù)其他就必須都是組函數(shù),否則報(bào)錯(cuò)誤;

Vsrcher2按字符串的實(shí)際長(zhǎng)度存;字段取值不定長(zhǎng),一定有寬度Char按字符竄的定義長(zhǎng)度存,不足的不空格;字段取值定長(zhǎng);沒到長(zhǎng)度系統(tǒng)會(huì)自動(dòng)補(bǔ)

INSERT數(shù)據(jù)按四舍五入小數(shù)位,且無(wú)視小數(shù)位數(shù),只取規(guī)定位,而且小數(shù)位四舍五入;整數(shù)位多了報(bào)錯(cuò);Date一定不能定義寬度;

腳本文件:craetetabletable_namesyntax每條命令后面加“;“然后加commit

Sqlpulssd0907/se0907@test.sql最后的“0907“后面要加空格然后再寫;已運(yùn)行直接寫文件名

Createtabletable_name()ASsubquery;(查詢語(yǔ)句)該表直接由查詢返回結(jié)果決定,拷貝的數(shù)據(jù)和非空約束其他沒有;

Intsertintotablename(id,last_name,salary,title)Selectlast_name,salary,titlefroms_emp;Wherestart_date1000orderbysalarydesc,commission_pctasc(執(zhí)行順序fromwhere-select--order)null最大

Selectlower(‘SQLCourse’)froms_emp;lower小寫upper大寫如果用于條件語(yǔ)句,在條件上寫即可To_number(‘a(chǎn)b’,’xx’)

To_char(salary,’$99.999.99’)不并長(zhǎng)前面無(wú)0To_char(salary,’$00.000.00’)并長(zhǎng)前面有0

$可以不寫,想表示¥,寫L(須改變相應(yīng)的環(huán)境變量),不能直接寫¥,只能是0或9

selectfirst_namefroms_empwheredept_id="42"selectfirst_namefroms_empwheredept_id=42to_number(‘42’)==42selectto_number("ab")froms_emp錯(cuò)誤

selectto_number("ab","xx")froms_emp十六進(jìn)制-十進(jìn)制(171=10*16+11)

allNotbetweenNotinNotLikeIsNotNull

Where條件一AND條件2OR條件3;等價(jià)于(滿足條件一和條件二的)或者滿足條件3的

Where條件一AND(條件2OR條件3)等價(jià)于{(滿足條件一和條件二)或者(條件一和條件三)}nvl的兩個(gè)參數(shù)必須為相同類型表達(dá)字符和字符串使用‘’,

echo$ORACLE_SID.\\得到數(shù)據(jù)庫(kù)實(shí)例的名字

sqlplusesd1007/esd1007數(shù)據(jù)庫(kù)連接(本地方式)一定要設(shè)置環(huán)境變量sentenvPATH:$ORACLE_HOME/bin在vi(edit)中寫命令時(shí)不可以加;在終端上寫命令是要加;

Sqlpluscommanddesc表名=describe表名

select列名from表名;(小心分號(hào))

selectsalary*12,first_namefroms_empwheresalary>1200先做where

selectsalary*12,first_namefroms_empwheresalary*121000這個(gè)快

where子句不可以做別名;

wheredept_idin(32,42,31)等于wheredept_id=any(32,42,31);等于wheredept_id=32,or條件2or條件3;

友情提示:本文中關(guān)于《oracle總結(jié)》給出的范例僅供您參考拓展思維使用,oracle總結(jié):該篇文章建議您自主創(chuàng)作。

來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請(qǐng)聯(lián)系我們及時(shí)刪除。


oracle總結(jié)》由互聯(lián)網(wǎng)用戶整理提供,轉(zhuǎn)載分享請(qǐng)保留原作者信息,謝謝!
鏈接地址:http://www.seogis.com/gongwen/671810.html