基本知識與SQLPLUS環(huán)境_第1頁
基本知識與SQLPLUS環(huán)境_第2頁
基本知識與SQLPLUS環(huán)境_第3頁
基本知識與SQLPLUS環(huán)境_第4頁
基本知識與SQLPLUS環(huán)境_第5頁
已閱讀5頁,還剩94頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第99頁第一章 Oracle 基本知識與SQL*PLUS環(huán)境一上機目的熟悉Oracle的基本知識。熟悉Oracle的命令操作環(huán)境SQL*PLUS。熟悉并掌握一些SQL*PLUS命令。二預(yù)備知識1Oracle數(shù)據(jù)庫管理系統(tǒng)的簡介1979年,硅谷的一個小公司推出了Oracle,這是第一個與數(shù)據(jù)訪問語言SQL結(jié)合的關(guān)系數(shù)據(jù)庫。今天,Oracle公司已是世界上數(shù)據(jù)庫管理系統(tǒng)及相關(guān)產(chǎn)品的最大供應(yīng)商。發(fā)布于1985年的Oracle第5版,是第一個真正的客戶/服務(wù)器數(shù)據(jù)庫系統(tǒng)。Oracle 8以及Oracle 8i是Oracle公司的最新產(chǎn)品。2Oracle8服務(wù)器Oracle8服務(wù)器是一個精致的信息管理環(huán)

2、境。它是一個大量數(shù)據(jù)的儲藏所,并給用戶提供對這些數(shù)據(jù)的快速訪問。Oracle8服務(wù)器允許應(yīng)用系統(tǒng)之間共享數(shù)據(jù)。信息存放在一個地方并由許多應(yīng)用系統(tǒng)來使用。Oracle8服務(wù)器可運行在Sun系列以及WindowsNT上。Oracle8服務(wù)器運行在很多不同的計算機上,支持下列配置:基于主機的配置 用戶直接連到存放數(shù)據(jù)庫的同一計算機上??蛻魴C/服務(wù)器結(jié)構(gòu) 用戶通過網(wǎng)絡(luò)從他們的個人計算機(客戶機)上訪問數(shù)據(jù)庫,數(shù)據(jù)庫駐留在一個分離的計算機(服務(wù)器)上。分布式處理 用戶訪問存放在不止一臺計算機上的數(shù)據(jù)庫。數(shù)據(jù)庫分散在不止一臺機器上,用戶并不需要了解他們存放的數(shù)據(jù)的實際存放位置。Web計算 能從基于Inte

3、rnet的應(yīng)用程序訪問數(shù)據(jù)。Personal Oracle從1995年處開始,Oracle推出了在Dos和Microsoft Windows環(huán)境下的個人計算機產(chǎn)品。運行Personal Oracle需要如下的配置:386以上的中央處理單元(CPU),推薦486或奔騰。最小60MB磁盤空間。處理器速度不低于40MHZ,66MHZ以上更好。最少16MB的擴充內(nèi)存。Microsoft Windows95或者NT.本書主要以Personal Oracle為主進行說明。CDE 工具Oracle ReportsOracle GraphicsOracle FormsOracle BookOracle Ser

4、verSQL 和 PL/SQLCDE 工具Oracle ReportsOracle GraphicsOracle FormsOracle BookOracle ServerSQL 和 PL/SQLOracle CardOracle CaseSQL*PLUSPro*OracleText Retrieval其它產(chǎn)品圖1-1 Oracle 產(chǎn)品5SQL,SQL*Plus 和 PL/SQLSQL 是一種能夠訪問關(guān)系數(shù)據(jù)庫(包括Oracle數(shù)據(jù)庫)的語言。它能夠用在每一個Oracle工具中。SQL*Plus 是一個SQL和PL/SQL都能用的Oracle產(chǎn)品,并且也有自己的命令語言。PL/SQL是為了編

5、寫應(yīng)用程序和操作數(shù)據(jù)的Oracle過程化語言,包含著SQL命令的子集,它適用于每個CDE產(chǎn)品。6Oracle數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)Oracle數(shù)據(jù)庫系統(tǒng)是具有管理Oracle數(shù)據(jù)庫功能的計算機軟件系統(tǒng)。每一個運行的Oracle數(shù)據(jù)庫與一個Oracle實例(instance)相聯(lián)系。一個Oracle實例是存取和控制一數(shù)據(jù)庫的軟件機制。每一次在數(shù)據(jù)庫服務(wù)器上啟動一數(shù)據(jù)庫時,稱為系統(tǒng)全局區(qū)(system global area)的一內(nèi)存區(qū)(簡稱SGA)被分配,有一個或多個Oracle進程被起動。該SGA和Oracle進程的結(jié)合稱為一個Oracle數(shù)據(jù)庫實例。一個實例的SGA和進程為管理數(shù)據(jù)庫數(shù)據(jù)、為該

6、數(shù)據(jù)庫一個或多個用戶服務(wù)而工作。在Oracle系統(tǒng)中,首先是實例啟動,然后由實例裝配(mount)一個數(shù)據(jù)庫。進程結(jié)構(gòu)進程(process)是操作系統(tǒng)中的一種機制,它可執(zhí)行一系列的操作步驟。在有些操作系統(tǒng)中使用作業(yè)(JOB)或任務(wù)(TASK)的術(shù)語。一個進程通常有它自己的專用存儲區(qū)。Oracle進程的體系結(jié)構(gòu)設(shè)計使性能最大。Oracle實例有兩種類:單進程實例和多進程實例。SGAOracle Server數(shù)據(jù)庫應(yīng)用圖1-2 單進程Oracle實例單進程Oracle(又稱單用戶Oracle)是一個數(shù)據(jù)庫系統(tǒng),一個進程執(zhí)行全部Oracle代碼。由于Oracle部分和客戶應(yīng)用程序不能分別以進程執(zhí)行,

7、所以O(shè)racle的代碼和用戶數(shù)據(jù)庫應(yīng)用是單個進程執(zhí)行,其SGAOracle Server數(shù)據(jù)庫應(yīng)用圖1-2 單進程Oracle實例在單進程環(huán)境下的Oracle實例,僅允許一個用戶存取。例如在MS-DOS上運行Oracle。用戶進程用戶進程用戶進程用戶進程SGARECOPMONSMONDBWRLGWRARCH圖1-3 多進程Oracle實例多進程Oracle實例(又稱多用戶Oracle)使用多個進程來執(zhí)行Oracle的不同部分,用戶進程用戶進程用戶進程用戶進程SGARECOPMONSMONDBWRLGWRARCH圖1-3 多進程Oracle實例在多進程系統(tǒng)中,進程分為兩類:用戶進程和Oracle

8、進程。當一用戶運行一應(yīng)用程序,如Pro*c程序或一個Oracle工具(如SQL*Plus),為用戶運行的應(yīng)用建立一個用戶 進程。Oracle進程又分為兩類:服務(wù)器進程(server process)和后臺進程(background process),服務(wù)器進程用于處理連接到該實例的用戶進程的請求。當應(yīng)用和Oracle是在同一臺機器上運行,而不再通過網(wǎng)絡(luò),一般將用戶進程和它相應(yīng)的服務(wù)器進程組合成單個進程,可降低系統(tǒng)開銷。然而,當應(yīng)用和Oracle運行在不同的機器上時,用戶進程經(jīng)一個分離服務(wù)器進程Oracle通信。它執(zhí)行下列任務(wù):對應(yīng)用所發(fā)出的SQL語句進行語法分析和執(zhí)行。從磁盤(數(shù)據(jù)文件中)讀入

9、必要的數(shù)據(jù)塊到SGA的共享數(shù)據(jù)庫緩沖區(qū)(該塊不在緩沖區(qū)時)。將結(jié)果返回給應(yīng)用程序處理。系統(tǒng)為了使性能最好和協(xié)調(diào)多個用戶,在多進程系統(tǒng)中使用一些附加進程,稱為后臺進程。在許多操作系統(tǒng)中,后臺進程是在實例啟動時自動地建立。一個Oracle實例可以有許多后臺進程,但它們不是一直存在。后臺進程的名字為:DBWR數(shù)據(jù)庫寫入程序LGWR 日志寫入程序CKPT 檢查點SMON 系統(tǒng)監(jiān)控PMON 進程監(jiān)控ARCH 歸檔RECO 恢復(fù)LCKn 封鎖Dnnn 調(diào)度進程Snnn 服務(wù)器內(nèi)存結(jié)構(gòu)Oracle在內(nèi)存存儲下列信息:執(zhí)行的程序代碼。連接的會話信息(包括當前不活動的)。程序執(zhí)行期間所需要數(shù)據(jù)(如查詢的當前狀態(tài)

10、)。Oracle進程間通信和共享的信息(如封鎖信息)。存儲在外存儲上的緩沖信息。Oracle具有下列基本的內(nèi)存結(jié)構(gòu):軟件代碼區(qū)系統(tǒng)全局區(qū)(SGA),包括數(shù)據(jù)庫緩沖存儲區(qū)、日志緩沖區(qū)和共享池程序全局區(qū)(PGA),包括棧區(qū)和數(shù)據(jù)區(qū)。排序區(qū)(sort area)。7SQL*Plus命令SQL*Plus有許多命令,表1-1只是列舉了一部分常用的供讀者參考。表1-1 常用SQL*Plus命令SQL*Plus命令縮寫意義APPEND textA text把字符串增加到當前行的末尾CHANGE/old/new/C/old/new/把當前行的舊字符串替換成新字符串CHANGE /text/C/text/把當前

11、行中字符串刪除CLEAR BUFFERCL BUFF從SQL緩沖區(qū)中刪除所有行DEL刪除當前行INPUTI插入許多行INPUTtextI text插入一個包含text字符串的行LISTL顯示SQL緩沖區(qū)的所有行LIST nL n顯示SQL緩沖區(qū)中的一行到n行LIST m nL m nSQL緩沖區(qū)中的從第m行顯示到第n行RUNR顯示并運行在緩沖區(qū)中的當前SQL命令SAVE filename把SQL緩沖區(qū)中的內(nèi)容保存到以filename為名字的文件中,默認路徑為orawinbinGET filename把以filename為名字的文件內(nèi)容調(diào)入SQL緩沖區(qū)中START filename filena

12、me運行以前保存的命令文件ED filename用默認的編輯器編輯保存的文件內(nèi)容EXIT退出SQL*PlusRUNFORM filename從SQL*Plus中運行一個Oracle Forms應(yīng)用程序SPOOL filename寫所有的后面的命令或者輸出到一個已經(jīng)命名的文件中。假脫機輸入輸出文件的后綴為.LISSPOOL OFF|OUTOFF 關(guān)閉假脫機輸入輸出文件;OUT改變假脫機輸入輸出,送文件到打印機上DESCRIBE tablenameDESC tablename顯示任何數(shù)據(jù)庫表的數(shù)據(jù)結(jié)構(gòu)HELP擊活Oracle內(nèi)部的幫助部件HOST command在SQL*Plus中擊活一個操作系統(tǒng)

13、命令CONNECT userid/passwordCONN userid/password在當前的登錄下,擊活其它的Oracle用戶PROMPT text當運行一個命令文件時,顯示文本三上機內(nèi)容SQL*Plus的啟動當讀者登錄到操作系統(tǒng)后,你有三種方法啟動SQL*Plus。SQLPLUS讀者將看到如下的信息:SQL*Plus: Version 3.1.1 Production on Mon Oct 4 1993Copyright (C) 1992, Oracle Corporation, California, USA.All rights reserved.Enter Username:輸入

14、你的用戶名字并按回車。SQL*Plus將提示:Enter Password:輸入你的密碼并按回車。那么,讀者將看到SQL*Plus的提示符:SQL例如:SQLPLUSSQL*Plus: Version 3.1.1 Production on Mon Oct 4 1993Copyright (C) 1992, Oracle Corporation, California, USA.All rights reserved.Enter Username:scottEnter Password:tigerSQLSQLPLUS Username再提示你輸入密碼。例如:SQLPLUS scottEnter

15、 Password:tigerSQL*Plus: Version 3.1.1 Production on Mon Oct 4 1993Copyright (C) 1992, Oracle Corporation, California, USA.All rights reserved.SQLSQLPLUS username/password例如:SQLPLUS scott/tigerSQL*Plus: Version 3.1.1 Production on Mon Oct 4 1993Copyright (C) 1992, Oracle Corporation, California, USA

16、.All rights reserved.SQL退出SQL*PlusSQLEXITSQL*Plus顯示Oracle版本之后顯示操作系統(tǒng)提示符。SQL命令SQL命令包括數(shù)據(jù)定義語言(如Create、Alter等)和數(shù)據(jù)操作語言(Select Insert Update Delete等),這些都可在SQL*Plus中使用。如:SQLSELECT EMPNO, ENAME, JOB, SAL 2FROM EMP WHERE SAL LISTSQL*Plus顯示當前緩沖區(qū)中的命令:1SELECT EMPNO, ENAME, JOB, SAL 2FROM EMP WHERE SAL SELECT EPN

17、O, ENAME, JOB, SAL 2FROM EMP WHERE SAL CHANE /EPNO/EMPNO修改的行在屏幕上顯示:1*SELECT EMPNO, ENAME, JOB, SAL 再用RUN命令運行當前命令。SQLRUNSQL*PLUS列出其命令然后運行它。1SELECT EMPNO, ENAME, JOB, SAL 2FROM EMP WHERE SAL INPUT3接著可進入新行,然后按ENTER鍵,SQL*PLUS再次提示新行:3ORDER BY SAL4按ENTER鍵,表示不進入任何行,然后用RUN檢驗和重新運行查詢。在一行上添加一原文用APPEND命令,將一原文加到

18、緩沖區(qū)中當前行的末端:SQLLIST3*ORDER BY SALSQLAPPEND DESC3*ORDER BY SAL DESC使用RUN檢驗和重新運行查詢。刪除一行用LIST命令列出要刪除的行。用DEL命令刪除。SQLLIST3*ORDER BY SAL DESCSQLDEL用系統(tǒng)編輯程序編輯命令在SQL*PLUS中運行操作系統(tǒng)缺省的文本編輯程序(EDIT),命令形式為:SQLEDITEDIT將緩沖區(qū)中的內(nèi)容裝入系統(tǒng)缺省的文本編輯器,然后用文本編輯器的命令編輯文本。完成后保存編輯的文本,然后退出。該文本保存到當前的緩沖區(qū)。保存SAVE命令SQLSAVE 文件名例如:SQLLIST1SELE

19、CT EMPNO, ENAME, JOB, SAL 2FROM EMP WHERE SAL SAVE empinfoCreated file empinfo運行命令文件可用命令START 文件名或者 文件名的命令格式。如上例:SQLSTART EMPINFO或SQLEMPINFO清緩沖區(qū)SQLCLEAR BUFFERDESCRIBE列出表的結(jié)構(gòu)如:SQLDESC EMP NameNull?TypeEMPNONOT NULLNUMBER(4)ENAMEVARCHAR2(10)JOBVARCHAR2(10)MGRNUMBER(4)HIREDATEDATESALNUMBER(7,2)COMMNUMB

20、ER(7,2)DEPTNONOT NULLNUMBER(2)PL/SQL命令SQLDeclareBeginSELECT * FROM EMP;EXCEPTIONWHEN NO_DATA_FOUND THEN RASIE_APPLICATION_ERROR(-12201,No data found)End;查詢結(jié)果將顯示出來。四上機作業(yè)練習SQL命令:SELECT * FROM EMP;。用LIST顯示緩沖區(qū)內(nèi)容。用CHANGE命令修改當前行。用APPEND增加一部分命令。用EDIT編輯緩沖區(qū)內(nèi)容。用SAVE命令保存緩沖區(qū)內(nèi)容到EMPFILE中。用START命令運行EMPFILE文件。清除緩沖區(qū)

21、。第二章 數(shù)據(jù)表的創(chuàng)建一上機目的了解并掌握Oracle中表結(jié)構(gòu)的定義。了解并掌握Oracle中的用Create命令定義表的方法,以及表的完整性定義。了解并掌握Oracle中的用Alter命令和Drop命令對表的修改和刪除。二預(yù)備知識DDL是SQL命令的子集,用來創(chuàng)建、修改、刪除Oracle數(shù)據(jù)庫結(jié)構(gòu)。這些命令能立即影響數(shù)據(jù)庫和數(shù)據(jù)字典字段信息。表名命名規(guī)則所用的表名必須滿足下面的條件:名字必須以A-Z 或a-z的字母開始;名字可以包括字母、數(shù)字和特殊字母(_)。字符$和#也是合法的,但是這種用法不提倡;名字大小寫是一樣的;例如EMP、emp和eMp是表示同一個表;名字最長不超過30個字符;表名

22、不能和其它的對象重名;表名不能是SQL保留字。表2-1 表名命名舉例名字合法EMP85YES85EMPNO(開始不是字母)FIXED_ASSETSYESFIXED ASSETSNO(包含空格)UPDATENO(SQL保留字)字段類型表2-2 字段類型數(shù)據(jù)類型描述VARCHAR2(w)變長字符長度為w。最長為2000個字符。CHAR(w)定長字符長度為w。默認為1個字符;最長為255個字符NUMBER38位有效數(shù)字的浮點數(shù)NUMBER(w)W位精確度的整數(shù),范圍從1至38NUMBER(w,s)W是精度,或總的數(shù)字書,范圍從1至38。S是比例,或是小數(shù)點右邊的數(shù)字位。比例的范圍從-84至127DA

23、TE日期值,范圍從公元前14712年1月到公元314712年12月LONG變長字符串,其最大長度為2G(或231-1個字節(jié))RAW 和LONG RAW面向字節(jié)數(shù)據(jù),可存儲字符串、浮點數(shù),二進制數(shù)據(jù)等Create命令1)、CREATE TABLE table_name( column_name type(size), column_name type(size), );例如:CREATE TABLE DEPT(DEPTNO NUMBER(2),DNAME VARCHAR2(12),LOC VARCHAR2(12);2)、CREATE TABLE table_name (column_name,)

24、 AS SELECT statement;例如:CREATE TABLE DEPTNO10 (NAME,LOCATION)AS SELECT DNAME,LOC FROM DEPTWHERE DEPTNO = 10;4完整性約束Oracle允許用戶為表和列定義完整性約束來增強一定的規(guī)則??煞譃椋罕砑s束和字段約束5約束類型1)、NOT NULL約束NOT NULL約束保證字段值不能為NULL。沒有NOT NULL約束的字段,值可以為NULL。2)、UNIQUE約束指定一個字段或者字段的集合為唯一鍵。在表中沒有兩行具有相同的值。如果唯一鍵是基于單條記錄的,NULL是允許的。表約束命令格式:,CON

25、STRAINT constraint_name UNIQUE (Column, Column, )字段約束命令格式:CONSTRAINT constraint_name UNIQUE例如:CREATE TABLE DEPT(DEPTNO NUMBER, DNAME VARCHAR2(9),LOC VARCHAR2(10),CONSTRAINT UNQ_DEPT_LOC UNIQUE(DNAME,LOC);UNQ_DEPT_LOC是一個表約束。3)、主鍵約束(Primary Key Constraint)主鍵約束強制字段和字段集合的唯一性,并且用一個唯一索引來管理它。每個表中只能用一個主鍵,這樣

26、可以通過主鍵來標識表中的每條記錄。NULL值不允許在主鍵字段出現(xiàn)。表約束命令格式:,CONSTRAINT constraint_namePRIMARY KEY (Column, Column, )字段約束命令格式:CONSTRAINT constraint_name PRIMARY KEY例如:用字段約束定義DEPTNO為主鍵CREATE TABLE DEPT(DEPTNO NUMBER(2) CONSTRAINT DEPT_PRIM PRIMARY KEY,);4)、外鍵約束外鍵提供表內(nèi)或表間的完整性規(guī)則。外鍵必須依賴于一個primary或uniquekey。表約束命令格式:,CONSTRA

27、INT constraint_name FOREIGN KEY (Column, Column, ) REFERENCE table (column, column, )字段約束命令格式:CONSTRAINT constraint_name FOREIGN KEY table (column)例如:CREATE TABLE EMP(CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCE DEPT(DEPTNO);5)、Check約束CHECK約束定義了每條記錄必須滿足的條件語法:CONSTRAINT constraint_name CHECK (

28、condition)Alter命令A(yù)LTER TABLE命令可用來修改數(shù)據(jù)表的定義。命令格式:ALTER TABLE tablenameADD或MODIFY或DROP options (column_spec column_constraint) ENABLE clause 或DISABLE clauseADD關(guān)鍵字可以用來給已存在的數(shù)據(jù)表增加一個字段或約束。如:給EMP增加一個字段ALTER TABLE EMPADD (SPOUSES_NAME CHAR(10));Table altered。MODIFY關(guān)鍵字可以用來修改已存在的數(shù)據(jù)表定義。如:把EMP中ENAME長度改為25個字符ALTE

29、R TABLE EMPMODIFY (ENAM CHAR(25);Table altered。DROP關(guān)鍵字可以用來刪除已存在數(shù)據(jù)表的約束。如:把EMP中主鍵刪除ALTER TABLE EMPDROP PRIMARY KEY;Table altered。Drop 命令用DROP TABLE命令刪除Oracle數(shù)據(jù)表的定義。命令格式:DROP TABLE table_name CASCADE CONSTRAINT例如:DROP TABLE EMP;CASCADE CONSTRAINT選項說明了也把完整性約束一起刪除。注意:DROP TABLE也把數(shù)據(jù)表中的數(shù)據(jù)刪除。數(shù)據(jù)表的VIEWS和SYNOM

30、NYMS保留下來,但它們變成了不合法的。任何懸而未決的事務(wù)將被提交。只有數(shù)據(jù)表的生成者或DBA才有權(quán)刪除它。三上機內(nèi)容創(chuàng)建表EMPCREATE TABLE EMP(EMPNO NUMBER(4) NOT NULL,ENAME VARCHAR2(10),JOB VARCHAR2(10),MGR NUMBER(4),HIREDATE DATE,SAL NUMBER(7,2),COMM NUMBER(7,2),DEPTNO NUMBER(2) NOT NULL);Table created.用SQL*PLUS命令DESCRIBE來看生成的EMP表的列明細清單:輸入命令:DESCRIBE EMPEMP

31、生成的數(shù)據(jù)表結(jié)構(gòu)顯示如下: NameNull?TypeEMPNONOT NULLNUMBER(4)ENAMEVARCHAR2(10)JOBVARCHAR2(10)MGRNUMBER(4)HIREDATEDATESALNUMBER(7,2)COMMNUMBER(7,2)DEPTNONOT NULLNUMBER(2)從其他表中抽取字段生成數(shù)據(jù)表CREATE TABLE EMP_PART ASSELECT EMPNO,ENAME,JOB,SAL,COMM FROM EMP;Table Created.輸入命令:DESCRIBE EMP_PARTEMP_Part生成的數(shù)據(jù)表結(jié)構(gòu)結(jié)果顯示如下: Name

32、Null?TypeEMPNONOT NULLNUMBER(4)ENAMEVARCHAR2(10)JOBVARCHAR2(10)SALNUMBER(7,2)COMMNUMBER(7,2)DROP命令刪除數(shù)據(jù)表DROP TABLE EMP_PART;Table dropped.給數(shù)據(jù)表EMP增加一個字段SPOUSES_NAMEALTER TABLE EMPADD (SPOUSES_NAME CHAR(10));輸入命令:DESCRIBE EMPEMP生成的數(shù)據(jù)表結(jié)構(gòu)顯示如下: NameNull?TypeEMPNONOT NULLNUMBER(4)ENAMEVARCHAR2(10)JOBVARCHA

33、R2(10)MGRNUMBER(4)HIREDATEDATESALNUMBER(7,2)COMMNUMBER(7,2)DEPTNONOT NULLNUMBER(2)SPOUSES_NAMECHAR(10)用ALTER的MODIFY命令修改已存在的字段的定義ALTER TABLE EMPMODIFY (ENAME VARCHAR2(12);Table Altered.輸入命令:DESCRIBE EMPEMP生成的數(shù)據(jù)表結(jié)構(gòu)顯示如下: NameNull?TypeEMPNONOT NULLNUMBER(4)ENAMEVARCHAR2(12)JOBVARCHAR2(10)MGRNUMBER(4)HIR

34、EDATEDATESALNUMBER(7,2)COMMNUMBER(7,2)DEPTNONOT NULLNUMBER(2)SPOUSES_NAMECHAR(10)用ALTER的DROP命令刪除數(shù)據(jù)表中已存在的約束ALTER TABLE EMP DROP PRIMARY KEY;Table Altered. 7創(chuàng)建表CUSTOMERcreate table customer(last_name varchar2 (30) not null,state_cdvarchar(2),salesnumber);Table created.8創(chuàng)建表STATEcreate table state(state

35、_cdvarchar(2) not null,sate_namevarchar2(30);Table created.四上機作業(yè)創(chuàng)建如下三個基表:S(S#,SNAME,AGE,SEX) 對應(yīng)的中文為:學生(學號,姓名,年齡,性別)SC(S#,C#,GRADE) 對應(yīng)的中文為:學習(學號,課程號,成績)C(C#,CNAME,TEACHER) 對應(yīng)的中文為:課程(課程號,課程名,任課教師)注:本書以后要用到這三個基本表。生成一個數(shù)據(jù)表PROJECTS,其字段定義如下,其中PROJID是主鍵并且要求P_END_DATE不能比P_START_DATE早。 字段名稱數(shù)據(jù)類型長度PROJIDNUMBER4

36、P_DESCVARCHAR220P_START_DATEDATEP_END_DATEDATEBUDGET_AMOUNTNUMBER7,2MAX_NO_STAFFNUMBER2生成一個數(shù)據(jù)表ASSIGNMENTS,其字段定義如下,其中PROJID是外鍵引自PROJECTS數(shù)據(jù)表,EMPNO是數(shù)據(jù)表EMP的外鍵,并且要求PROJID和EMPNO不能為NULL。 字段名稱數(shù)據(jù)類型長度PROJIDNUMBER4EMPNONUMBER4A_START_DATEDATEA_END_DATEDATEBILL_RATENUMBER4,2ASSIGN_TYPEVARCHAR22用DESCRIBE命令查看1和2題

37、定義的字段。給1題中的PROJECTS數(shù)據(jù)表增加一個COMMENTS字段,其類型為LONG。給2題中的ASSIGNMENTS數(shù)據(jù)表增加一個HOURS字段,其類型為NUMBER。第三章 數(shù)據(jù)插入、修改和刪除一上機目的在數(shù)據(jù)表中用Insert增加記錄。用Update修改數(shù)據(jù)表中的數(shù)據(jù)。用Delete刪除表中的數(shù)據(jù)。了解事務(wù)處理過程及其命令。二預(yù)備知識Insert命令1)用來在數(shù)據(jù)表中增加記錄,格式如下:INSERT INTO tablename (column, column, .)VALUES (value, value, .);命令中(column, column, .)是可選的。一般情況下,

38、為了編程的方便,最好指定字段列表。該命令每次只能增加一條記錄。注意,CHARACTER和DATE必須用單引號括起來。例如:INSERT INTO DEPT (DEPTNO,DNAME,LOC)VALUES (50,市場部,上海);在DEPT中增加一個新部門,忽略部門名稱,這時字段列表必須指定否則出錯,可用如下命令:INSERT INTO DEPT (DEPTNO, LOC)VALUES (50,上海);另外,如果部門名稱不能確定,可用NULL代替,如下:INSERT INTO DEPT (DEPTNO,DNAME,LOC)VALUES (50,NULL,上海);增加DATE類型的數(shù)值,常用格式

39、是DD-MON-YY。默認的世紀是20世紀,ORCALE已克服了Y2K(千年蟲)問題。如下:INSERT INTO EMP (EMPNO,NAM,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)VALUES (7568,MASON,ANALYST,7566,TO_DATE(24/06/2084 9:30,DD/MM/YYYY HH:MI),3000,NULL,20);2)增加從其他數(shù)據(jù)表查詢出的數(shù)據(jù)命令格式:INSERT INTO table (column, column, .)SELECT select-listFROM table(s);Update命令在需要修改表中數(shù)

40、據(jù)時,可使用update命令如下:UPDATE tablealiasSET column,column. = expression, subqueryWHERE condition;命令由三部分組成:update后跟一個或多個要修改的表,這部分是必不可少的。set后跟一個或多個要修改的表列,這也是必不可少的。where后跟查詢條件,這是選項;如果WHERE子句忽略,UPDATE命令將修改數(shù)據(jù)表中所有記錄。例如:修改EMP表中SCOTT的記錄數(shù)據(jù),把他調(diào)到銷售部,并且工資提高10%,具體命令如下:UPDATE EMPSET JOB =SALESMAN,HIREDATE = SYSDATE,SAL

41、 = SAL*1.1WHERE ENAME = SCOTT;1 record updated.Delete命令Delete命令用來從表中刪除一行或多行記錄。命令格式如下:DELETE FROM tableWHERE condition;該命令由兩部分組成:關(guān)鍵字delete from 后跟準備要從中刪除數(shù)據(jù)的表名,這是必不可少的。關(guān)鍵字where后跟刪除條件,是可選項;如果不用WHERE子句,數(shù)據(jù)表中的所有記錄將被刪除。例如刪除EMP表中部門號是10的記錄:DELETE FROM EMP WHERE DEPTNO = 10;事務(wù)(Transaction)事務(wù)是由一串修改數(shù)據(jù)庫的操作組成的。Or

42、acle中有兩種事務(wù):DML事務(wù)和DDL事務(wù)。DML事務(wù)是一些DML語句組成的,Oracle把事務(wù)作為單個實體或邏輯工作單元來處理;DDL事務(wù)只能由一條DDL語句組成。事務(wù)的執(zhí)行必須是完整的,也就是說事務(wù)處理中一部分提交給數(shù)據(jù)庫而其他部分不提交這是不允許的。對于事務(wù)來說,要么事務(wù)中所有處理都提交,要么所有的處理都放棄。事務(wù)是以可執(zhí)行的DML或DDL命令開始,以下面的情況結(jié)束:COMMIT/ROLLBACKDDL命令(DDL語句是自動提交)一些錯誤(如死鎖)注銷(如退出SQL*Plus)硬件錯誤1)、永久性修改為了使修改變成永久性,這些修改必須提交給數(shù)據(jù)庫。COMMIT命令可以用來使數(shù)據(jù)庫永久性

43、改變。而ROLLBACK可以撤消或放棄修改。在兩次提交之間對數(shù)據(jù)庫的修改就是事務(wù)。2)、撤消修改ROLLBACK可以放棄不提交的修改。ROLLBACK可以恢復(fù)上次提交之后修改過的數(shù)據(jù)。3)、系統(tǒng)錯誤事務(wù)被一些嚴重錯誤(例如系統(tǒng)錯誤)的中斷時,它將自動回滾。這阻止了由錯誤造成的對數(shù)據(jù)不完整的修改,而恢復(fù)到最近提交之后的數(shù)據(jù)表的狀態(tài)。用這種方式SQL*Plus保護了數(shù)據(jù)的完整性。自動回滾通常是系統(tǒng)錯誤造成的,例如斷電或RESET。而在輸入命令時的錯誤,例如拼寫錯誤或沒有授權(quán)的操作,不會造成事務(wù)的中斷或者自動回滾。這是因為錯誤是在編譯時而不是在運行時檢測到的。4)、用SQL語句控制事務(wù))、COMMI

44、T WORK;使當前事務(wù)永久的修改。清除這個事務(wù)中所有的保存點。結(jié)束事務(wù)。釋放事務(wù)中的鎖操作。關(guān)鍵字WORK是可選的。一般情況下,應(yīng)在應(yīng)用程序中用COMMIT(或ROLLBACK)顯式的結(jié)束事務(wù)。隱式(自動)結(jié)束事務(wù)在下列情況發(fā)生:DDL命令之前。DDL語句之后。和一個數(shù)據(jù)庫正常斷開之后。)、SAVEPOINT savepoint_name保存點能把事務(wù)分割成更小的部分。保存點允許在任意點阻止工作的進行。如果第二個保存點的名字和第一個保存點的名字相同,那么第一個保存點自動失效。保存點的最大數(shù)默認是5;但可以修改。)、ROLLBACK WORK to SAVEPOINT savepoint_na

45、meROLLBACK語句用來撤消工作。關(guān)鍵字WORK是可選的。SAVEPOINT也是可選的。如果ROLLBACK語句中沒有TO SAVEPOINT子句,那么它將結(jié)束事務(wù);回滾這個事務(wù)中所有的操作;清除這個事務(wù)中所有的保存點;釋放這個事務(wù)的鎖操作。三上機內(nèi)容用Insert在基本表customer中插入數(shù)據(jù)SQLinsert into customer values (Nicholson,CA,6989.99);1 row created.SQLinsert into customer values (Martin,CA,2345.45);1 row created.SQLinsert into

46、customer values (Laursen,CA,34.34);1 row created.SQLinsert into customer values (Bambi,CA,1234.55);1 row created.SQLinsert into customer values (McGraw,NJ,123.45);1 row created.在表STATE中插入指定的字段SQLinsert into state (state_name,state_cd)2values (Massachusetttes,MA);1 row created.SQLinsert into state (s

47、tate_name,state_cd)2values (California, CA);1 row created.SQLinsert into state (state_name,state_cd)2values (NewJersey,NJ);1 created.SQLinsert into state (state_name,state_cd)2values (NewYork,NY);1 created.3修改數(shù)據(jù)把state表中NewYork改為Florida,NY改為FD:UPDATE state SET state_name = Florida, state_cd = FD wher

48、e state_name = NewYork and state_cd = NY;4刪除數(shù)據(jù)從STATE表刪除state_name為Florida和state_cd為FD的記錄:DELETE FROM STATE WHERE state_name = Florida AND state_cd = FD;四上機作業(yè)用INSERT 命令輸入數(shù)據(jù)表3-1 基本表S的數(shù)據(jù)S1WANG20MS2LIU19MS3CHEN22MS4WU19MS5LOU21FS8DONG18F表3-2 基表C的數(shù)據(jù)C2MATHSMAC4PHYSICSSHIC3CHEMISTRYZHOUC1DBLIC5OSWEN 表3-3 基

49、本表SC的數(shù)據(jù)(空格為未選修)C# S#S1S2S3S4S5S8C1808590757090C270NULL8560NULLC38595NULL8090C490NULL70C57065NULL對S、C、SC表進行操作:1)、把C2課程的非空成績提高10%。2)、在SC表中刪除課程名為PHYSICS的成績的元組。3)、在S和SC表中刪除學號為S8的所有數(shù)據(jù)。在PROJECTS數(shù)據(jù)庫表中增加下列記錄:PROJID12P_DESCWRITE C030 COURSEPROOF READ NOTESP_START_DATE02-JAN-8801-JAN-89P_END_DATE07-JAN-8810-J

50、AN-89BUDGET_AMOUNT500600MAX_NO_STAFF11COMMENTSBR CREATIVEYOUR CHOICE在ASSIGNMENTS數(shù)據(jù)庫表中增加下列記錄:PROJID112EMPNO736979027844A_START_DATE01-JAN-8804-JAN-8801-JAN-89A_END_DATE03-JAN-8807-JAN-8810-JAN-89BILL_RATE50.0055.0045.50ASSIGN_TYPEWRWRPFHOURS152030把ASSIGMENTS表中ASSIGNMENT TYPE的WR改為WT,其他的值不變。在PROJECTS 和

51、ASSIGNMENTS插入更多的記錄。刪除自己隨意插入的記錄。第四章 數(shù)據(jù)查詢一上機目的掌握Select語句的運用。掌握一些函數(shù)的應(yīng)用。掌握子查詢的運用。連接和分組的應(yīng)用。二預(yù)備知識1Select語句Select命令用于從Oracle數(shù)據(jù)庫中檢索數(shù)據(jù)。讀者利用select命令告訴數(shù)據(jù)庫要檢索什么樣的信息。Select是讀者看到的最常用的SQL語句,select命令(如下)有六個基本部分構(gòu)成:SELECT DISTINCT *,COLUMN ALIAS,F(xiàn)ROM tableWHERE condition(s)ORDER BY column,exper ASC|DESCGROUP BY colum

52、n,experHAVING having_condtions;Select后跟用戶需要檢索的信息(如下一部分將要提到的表中表列的名字)。這是select命令必不可少的部分。From后跟檢索對象(如存放數(shù)據(jù)的一個或多個表的名稱),from部分也是必不可少的。Where后跟檢索條件(如限制檢索內(nèi)容的條件),where部分是可選的。Order by 后跟分類準則(如取自空值數(shù)據(jù)如何給出的第一部分的表列名稱表),order by 部分是可選的。Group by后跟分組的字段或準則。Having后跟分組的查詢條件。下面我們首先使用select語句操作名為user_tables的數(shù)據(jù)字典視圖:SQLsel

53、ect * from user_tableswhere table_name = customer;TABLE_NAMETABLESPACE_NAMECLUSTER_NAMEIOT_NAME PCT_FREE PCT_USEDINI_TRANS MAX_TRANS INITIAL_EXTENT NEXT_EXTENTMIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTSFREELIST_GROUPS LOG B NUM_ROWS BLOCKS EMPTY_BLOCKSAVG_SPACE CHAIN_CNT AVG_ROW_LENAVG_SPACE_FREE

54、LIST_BLOCKS NUM_FREELIST_BLOCKSDEGREE INSTANCES CACHE TABLE_LO SAMPLE_SIZELAST_ANAL PAR IOT_TYPE T S NES BUFFER_ ROW_MOVE GLOUSE DURATION SKIP COR MONCUSTOMERSYSTEM 4012551024010240 1 121 5011 YES N11 N ENABLEDNO N N NO DEFAULT DISABLED NONO DISABLED NO2選擇指定的列我們可以在select關(guān)鍵字后跟一個或多個表列。星號指示Oracle顯示表中的所

55、有字段。我們使用同樣的select語句,但指定了需要查看的一個表的某些字段:SQLselect table_name from user_tablesTABLE_NAMECUSTOMERSTATErows selected3條件查詢到目前為止,我們看到了select命令可用來查看表中所有表列(select *)或部分表列(select column1,column3)。如果讀者只想看特定的數(shù)據(jù)行,怎么辦呢?這就需要用wherer子句來解決了。例如:我們想要查看state_cd值為MA的所有客戶,可以用命令:select last_name,state_cd,sales from custome

56、r where state_cd = MA;結(jié)果如下:LAST_NAME ST SALESTeplow MA 23445.671)帶and/or的Where子句where子句指示Oracle查找表中數(shù)據(jù),并只返回滿足條件的行。在上面的例子中,要求Oracle僅返回state_cd等于MA的數(shù)據(jù)行。這是通過where state_cd = MA;來實現(xiàn)的。有時用戶要求返回同時滿足多個條件的行。例如:讀者可能對state_cd為CA且sales超過6000的行感興趣。語句select * from customer where state_cd = CA and sales 6000;得到下列輸出

57、:LAST_NAME ST SALESAbbeyCA 6969.96NicholsonCA 6989.99上面的例子中,我們需要返回滿足所有條件的行。如果用戶要求檢索滿足其中兩個條件之一的行應(yīng)該怎么辦呢?可用語句select * from customer where state_cd = CA or sales6000;。結(jié)果如下:LAST_NAME ST SALESTeplow MA 23445.67AbbeyCA 6969.96NicholsonCA 6989.99Martin CA 2345.45LaursenCA 34.34BambiCA 1234.55注意,盡管Telpow的sta

58、te_cd不等于CA,但由于其sales值超過6000,因此也顯示在輸出列表中。And 和or如讀者所知是邏輯操作符,決定查詢語句中where 條件之間的關(guān)系。邏輯條件的概念及其在Oracle產(chǎn)品中的用途及使用方法要用一整本書才可講清楚。此處精力主要放在實用技術(shù)上。表4-1解釋了當and和or出現(xiàn)在同一個where子句中時,Oracle是怎樣處理的。讀者應(yīng)細心分析涉及多個and和or的邏輯(稱為復(fù)合條件,compound conditions),否則將會引起混亂。例如:檢查語句select last_name from customer where state_cd = MA and stat

59、e_cd = CA;。其中兩個條件由關(guān)鍵字and連接,只有當兩個條件為真(true)時,該復(fù)合條件才能為真。表4-1 邏輯操作符or和and操作符作用Or當所連接的兩個條件之一為真時返回TRUEAnd當所連接的兩個條件都為真時返回TRUE語句select last_name from customer where state_cd = MA and state_cd = CA;中,對state_cd值為MA的數(shù)據(jù)行,第一個條件為TRUE,而第二個條件為FALSE(因為CA不等于MA)。該邏輯條件說明要顯示state_cd既為MA又為CA的數(shù)據(jù)行,這種情況是不可能出現(xiàn)的,因此,該復(fù)合條件永遠為假

60、,結(jié)果是什么也顯示不出來。2)帶NOT的where子句Oracle支持否定條件的搜索。例如:讀者可能想看看state_cd不為MA的所有客戶,語句select * from customer where state_cd != MA;(在SQL*Plus中符號!=的意思是“不等于”),輸出結(jié)果為:LAST_NAME ST SALESAbbeyCA 6969.96NicholsonCA 6989.99Martin CA 2345.45LaursenCA 34.34BambiCA 1234.55McGrawNJ 123.453)帶檢索范圍的where子句Oracle也支持限定范圍的檢索。例如:讀者

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論