It計(jì)算機(jī)課件 第4章 表和視圖_第1頁
It計(jì)算機(jī)課件 第4章 表和視圖_第2頁
It計(jì)算機(jī)課件 第4章 表和視圖_第3頁
It計(jì)算機(jī)課件 第4章 表和視圖_第4頁
It計(jì)算機(jī)課件 第4章 表和視圖_第5頁
已閱讀5頁,還剩117頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章表和視圖

第4章表和視圖

4.1表的創(chuàng)建和操作

4.2數(shù)據(jù)完整性和約束條件

4?37(修改表結(jié)構(gòu)

4?4分區(qū)表簡介

4.5視圖創(chuàng)建和操作

4.6階段訓(xùn)I練

4.7練習(xí)

第4章表和視圖

4.1表的創(chuàng)建和操作

表由記錄(行row)和字段(列column)構(gòu)成,是數(shù)據(jù)庫

中存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)。要進(jìn)行數(shù)據(jù)的存儲(chǔ)和管理,首先

要在數(shù)據(jù)庫中創(chuàng)建表,即表的字段(列)結(jié)構(gòu)。有了正確

的結(jié)構(gòu),就可以用數(shù)據(jù)操作命令,插入、刪除表中記

錄或?qū)τ涗涍M(jìn)行修改。比如,要進(jìn)行圖書管理,就需

要?jiǎng)?chuàng)建圖書和出版社等表,這里給出用于示范和訓(xùn)練

的圖書和出版社表的結(jié)構(gòu)和內(nèi)容,如表4-1、表4-2所示。

第4章表和視圖

表4-1圖書表

圖書編號(hào)圖書名稱出版社編號(hào)作者出版日期數(shù)量單價(jià)

A0001計(jì)算機(jī)原理01劉勇1998年5月7日325.30

A0002C語言程序設(shè)計(jì)馬麗2003年1月2日1018.75

A0003匯編語言程序設(shè)計(jì)黃海明2001年11月5日1520.18

第4章表和視圖

表4-2出版社表

編號(hào)出版社名稱地址聯(lián)系電話

01清華大學(xué)出版社北/p>

02西安電子科技大學(xué)出版社西/p>

第4章表和視圖

4.1.1表的創(chuàng)建

1.創(chuàng)建表的語法

表的創(chuàng)建需要CREATETABLE系統(tǒng)權(quán)限,表的基本創(chuàng)建

語法如下:

CREATETABLE表名

(列名數(shù)據(jù)類型(寬度)[DEFAULT表達(dá)式][COLUMN

CONSTRAINT],

[TABLECONSTRAINT]

[TABLEPARTITIONCLAUSE]

);

第4章表和視圖

由此可見,創(chuàng)建表最主要的是要說明表名、列名、列的

數(shù)據(jù)類型和寬度,多列之間用”分隔??梢允怯弥形幕?/p>

英文作為表名和列名。表名最大長度為30個(gè)字符。在同一個(gè)

用戶下,表不能重名,但不同用戶表的名稱可以相重。另外,

表的名稱不能使用Oracle的保留字。在一張表中最多可以包

含2000列。該語法中的其他部分根據(jù)需要添加,作用如下:

DEFAULT表達(dá)式:用來定義列的默認(rèn)值。

COLUMNCONSTRAINT:用來定義列級(jí)的約束條件。

TABLECONSTRAINT:用來定義表級(jí)的約束條件。

TABLEPARTITIONCLAUSE:定義表的分區(qū)子句。

第4章表和視圖

【訓(xùn)練1】創(chuàng)建圖書和出版社表。

步驟1:創(chuàng)建出版社表,輸入并執(zhí)行以下命令:

CREATETABLE出版社(

編號(hào)VARCHAR2Q),

出版社名稱VARCHAR2(30),

地址VARCHAR2(30),

聯(lián)系電話VARCHAR2(20)

);

執(zhí)行結(jié)果:

表已創(chuàng)建。

第4章表和視圖

步驟2:創(chuàng)建圖書表,輸入并執(zhí)行以下命令:

CREATETABLE圖書(

圖書編號(hào)VARCHAR2(5),

圖書名稱VARCHAR2(30),

出版社編號(hào)VARCHAR2(2),

作者VARCHAR2(10),

出版日期DATE,

數(shù)量NUMBER?),

單價(jià)NUMBER(7,2)

);

執(zhí)行結(jié)果:

表已創(chuàng)建。

第4章表和視圖

一步驟3:使用DESCRIBE顯示圖書表的結(jié)構(gòu),輸入并執(zhí)行

以下命令:

DESCRIBE圖書

執(zhí)行結(jié)果為:

名稱是否為空?類型

圖書編號(hào)VARCHAR2(5)

圖書名稱VARCHAR2(30)

出版社編號(hào)VARCHAR2(2)

作者VARCHAR2(10)

出版日期DATE

數(shù)量NUMBER(3)

單價(jià)NUMBER(7,2)

第4章表和視圖

說明:在以上訓(xùn)練中,列名和數(shù)據(jù)類型之間用空格分

隔,數(shù)據(jù)類型后的括號(hào)中為寬度(日期類型除外)。對(duì)于有小

數(shù)的數(shù)字型,前一個(gè)參數(shù)為總寬度,后一個(gè)參數(shù)為小數(shù)位。

用逗號(hào)分隔各列定義,但最后一列定義后不要加逗號(hào)。

2.通過子查詢創(chuàng)建表

如果要?jiǎng)?chuàng)建一個(gè)同已有的表結(jié)構(gòu)相同或部分相同的表,

可以采用以下的語法:

CREATETABLE表名(列名…)ASSQL查詢語句;

該語法既可以復(fù)制表的結(jié)構(gòu),也可以復(fù)制表的內(nèi)容,并

可以為新表命名新的列名。新的列名在表名后的括號(hào)中給出,

如果省略將采用原來表的列名。復(fù)制的內(nèi)容由查詢語句的

WHERE條件決定。

第4章表和視圖

【訓(xùn)練2】通過子查詢創(chuàng)建新的圖書表。

步驟1:完全復(fù)制圖書表到“圖書1〃,輸入并執(zhí)行以下

命令:

CREATETABLE圖書1ASSELECT*FROM圖書;

執(zhí)行結(jié)果:

表已創(chuàng)建。

步驟2:創(chuàng)建新的圖書表“圖書2〃,只包含書名和單價(jià),

輸入并執(zhí)行以下命令:

CREATETABLE圖書2(書名,單價(jià))ASSELECT圖書名

稱,單價(jià)FROM圖書;

執(zhí)行結(jié)果:

表已創(chuàng)建。

第4章表和視圖

步驟3:創(chuàng)建新的圖書表“圖書3〃,只包含書名和

單價(jià),不復(fù)制內(nèi)容,輸入并執(zhí)行以下命令:

CREATETABLE圖書3(書名,單價(jià))ASSELECT圖

書名稱,單價(jià)FROM圖書WHERE1=2;

執(zhí)行結(jié)果:

表已創(chuàng)建。

說明:“圖書1〃表的內(nèi)容和結(jié)構(gòu)同“圖書”表完

全一致,相當(dāng)于表的復(fù)制。

第4章表和視圖

''圖書2〃表只包含“圖書”表的兩列“圖書名稱”

和“單價(jià)”,并且對(duì)字段重新進(jìn)行了命名,“圖書2〃

表的“書名”對(duì)應(yīng)“圖書”表的“圖書名稱”,“圖

書2〃表的“單價(jià)”對(duì)應(yīng)“圖書”表的“單價(jià)”。

“圖書3〃表同“圖書2〃表的結(jié)構(gòu)一樣,但表的內(nèi)

容為空。因?yàn)閃HERE條件始終為假,沒有滿足條件的

記錄,所以沒有復(fù)制表的內(nèi)容。

3.設(shè)置列的默認(rèn)值

可以在創(chuàng)建表的同時(shí)指定列的默認(rèn)值,這樣在插

入數(shù)據(jù)時(shí),如果不插入相應(yīng)的列,則該列取默認(rèn)值,

默認(rèn)值由DEFAULT部分說明。

第4章表和視圖

【訓(xùn)練3】創(chuàng)建表時(shí)設(shè)置默認(rèn)值。

步驟1:創(chuàng)建表時(shí),設(shè)置表的默認(rèn)值。

CREATETABLE圖書4(

圖書編號(hào)VARCHAR2(5)DEFAULTNULL,

圖書名稱VARCHAR2(30)DEFAULT,未知;

出版社編號(hào)VARCHAR2(2)DEFAULTNULL,

出版日期DATEDEFAULT,。1-1月-1900;

作者VARCHAR2(10)DEFAULTNULL,

數(shù)量NUMBER(3)DEFAULT0,

單價(jià)NUMBER(7,2)DEFAULTNULL,

借出數(shù)量NUMBER(3)DEFAULT0

);

執(zhí)行結(jié)果:

表目創(chuàng)建。

?--吞M*-*'-

第4章表和視圖

步驟2:插入數(shù)據(jù)。

INSERTINTO圖書4(圖書編號(hào))VALUES(AOOOr);

執(zhí)行結(jié)果:

已創(chuàng)建1行。

步驟2:查詢插入結(jié)果。

SELECT*FROM圖書4;

第4章表和視圖

執(zhí)行結(jié)果:

圖書圖書名稱出版日期作者數(shù)量單

價(jià)借出數(shù)量

A0001未知01-1月-0000

0

說明:本訓(xùn)練中,只插入圖書編號(hào),其他部分取的

是默認(rèn)值。圖書名稱默認(rèn)為“未知”,出版日期默認(rèn)為

1900年1月1日,數(shù)量默認(rèn)為0,出版社編號(hào)、作者和單

價(jià)的默認(rèn)值為NULL。

第4章表和視圖

【練習(xí)1】創(chuàng)建圖書出借信息表,設(shè)置適當(dāng)?shù)哪J(rèn)

值,并插入數(shù)據(jù)。

結(jié)構(gòu)如下:

名稱是否為空?類型

圖書編號(hào)VARCHAR2(10)

借書人VARCHAR2(10)

借書日期DATE

歸還日期DATE

第4章表和視圖

4.刪除已創(chuàng)建的表

刪除表的語法如下:

DROPTABLE表名[CASCADECONSTRAINTS];

表的刪除者必須是表的創(chuàng)建者或具有DROPANY

TABLE權(quán)限。CASCADECONSTRAINTS表示當(dāng)要冊(cè)U

除的表被其他表參照時(shí),刪除參照此表的約束條件。

有關(guān)內(nèi)容請(qǐng)參考下一節(jié)。

第4章表和視圖

【訓(xùn)練4】刪除“圖書1〃表。

DROPTABLE圖書1;

執(zhí)行結(jié)果:

表已丟棄。

【練習(xí)2】刪除“圖書2〃、“圖書3〃和“圖書4〃表。

第4章表和視圖

4.1.2表的操作

1.表的重命名

語法如下:

RENAME舊表名TO新表名;

只有表的擁有者,才能修改表名。

【訓(xùn)練1】修改“圖書”表為“圖書5〃表:

RENAME圖書TO圖書5;

執(zhí)行結(jié)果:

表已重命名。

;'二w片

第4章表和視圖

2.清空表

清空表的語法為:

TRUNCATETABLE表名;

清空表可刪除表的全部數(shù)據(jù)并釋放占用的存儲(chǔ)空間。

有關(guān)訓(xùn)練請(qǐng)參照DELETE語句部分,注意兩者的區(qū)別。

3.添加注釋

(1)為表添加注釋的語法為:

COMMENTONTABLE表名IS

該語法為表添加注釋字符串。如IS后的字符串為空,

則清除表注釋。

第4章表和視圖

【訓(xùn)練2】為emp表添加注釋:“公司雇員列表”。

COMMENTONTABLEempIS,公司雇員列表,;

執(zhí)行結(jié)果:

注釋已創(chuàng)建。

(2)為列添加注釋的語法為:

COMMENTONCOLUMN表名.列名IS

該語法為列添加注釋字符串。如IS后的字符串為空,

則清除列注釋。

<1

第4章表和視圖

【訓(xùn)練3】為emp表的deptno列添加注釋:“部門編

號(hào)”。

COMMENTONCOLUMNemp.deptnoIS,部門編號(hào):

執(zhí)行結(jié)果:

注釋已創(chuàng)建。

【練習(xí)1】清除emp表的注釋。

4.1.3查看表

使用以下語法可查看表的結(jié)構(gòu):

DESCRIBE表名;

DESCRIBE可以簡寫為DESC。

可以通過對(duì)數(shù)據(jù)字典USERJDBJECTS的查詢,顯示當(dāng)

前模式用療的所有表。

第4章表和視圖

【訓(xùn)練1】顯示當(dāng)前用戶的所有表。

SELECTobjectnameFROMuserobjectsWHERE

objecttypeeTABLE,;

執(zhí)行結(jié)果:

OBJECTNAME

BONUS

DEPT

EMP

SALGRADE

出版社

圖書

第4章表和視圖

4.2數(shù)據(jù)完整性和約束條件

4.2.1數(shù)據(jù)完整性約束

表的數(shù)據(jù)有一定的取值范圍和聯(lián)系,多表之間的數(shù)據(jù)

有時(shí)也有一定的參照關(guān)系。在創(chuàng)建表和修改表時(shí),可通過定

義約束條件來保證數(shù)據(jù)的完整性和一致性。約束條件是一些

規(guī)則,在對(duì)數(shù)據(jù)進(jìn)行插入、刪除和修改時(shí)要對(duì)這些規(guī)則進(jìn)行

驗(yàn)證,從而起到約束作用。

L品

第4章表和視圖

完整性包括數(shù)據(jù)完整性和參照完整性,數(shù)據(jù)完整

性定義表數(shù)據(jù)的約束條件,參照完整性定義數(shù)據(jù)之間

的約束條件。數(shù)據(jù)完整性由主鍵(PRIMARYKEY)、非

空(NOTNULL)、惟一(UNIQUE)和檢查(CHECK)約束

條件定義,參照完整性由外鍵(FOREIGNKEY)約束條

件定義。

第4章表和視圖

4.2.1數(shù)據(jù)完整性約束

表的數(shù)據(jù)有一定的取值范圍和聯(lián)系,多表之間的數(shù)據(jù)

有時(shí)也有一定的參照關(guān)系。在創(chuàng)建表和修改表時(shí),可通過

定義約束條件來保證數(shù)據(jù)的完整性和一致性。約束條件是

一些規(guī)則,在對(duì)數(shù)據(jù)進(jìn)行插入、刪除和修改時(shí)要對(duì)這些規(guī)

則進(jìn)行驗(yàn)證,從而起到約束作用。

完整性包括數(shù)據(jù)完整性和參照完整性,數(shù)據(jù)完整性定

義表數(shù)據(jù)的約束條件,參照完整性定義數(shù)據(jù)之間的約束條

件。數(shù)據(jù)完整性由主鍵(PRIMARYKEY)、非空(NOT

NULL)、惟—(UNIQUE)和檢查(CHECK)約束條件定義,

參照完整性由外鍵(FOREIGNKEY)約束條件定義。

第4章表和視圖

4.2.2表的五種約束

表共有五種約束,它們是主鍵、非空、惟一、檢查和外

鍵。

1.主鍵(PRIMARYKEY)

主鍵是表的主要完整性約束條件,主鍵惟一地標(biāo)識(shí)表的

每一行。一般情況下表都要定義主鍵,而且一個(gè)表只能定義

一個(gè)主鍵。主鍵可以包含表的一列或多列,如果包含表的多

列,則需要在表級(jí)定義。主鍵包含了主鍵每一列的非空約束

和主鍵所有列的惟一約束。主鍵一旦成功定義,系統(tǒng)將自動(dòng)

生成一個(gè)B*樹惟一索引,用于快速訪問主鍵列。比如圖書

表中用“圖書編號(hào)”列作主鍵,“圖書編號(hào)”可以惟一地標(biāo)

識(shí)圖書表的每一行。

產(chǎn)「4后9》2

|第4章表和視圖

主鍵約束的語法如下:

[CONSTRANT約束名]PRIMARYKEY

--列級(jí)

[CONSTRANT約束名]PRIMARYKEY(列名1,列名2,...)-

-表級(jí)

2.非空(NOTNULL)

非空約束指定某列不能為空,它只能在列級(jí)定義。在默

認(rèn)情況下,Oracle允許列的內(nèi)容為空值。比如“圖書名稱”

列要求必須填寫,可以為該列設(shè)置非空約束條件。

非空約束語法如下:

[CONSTRANT約束名]NOTNULL

--列級(jí)

第4章表和視圖

約束分為兩級(jí),一個(gè)約束條件根據(jù)具體情況,可

以在列級(jí)或表級(jí)定義。

列級(jí)約束:約束表的某一列,出現(xiàn)在表的某列定

義之后,約束條件只對(duì)該列起作用。

表級(jí)約束:約束表的一列或多列,如果涉及到多

列,則必須在表級(jí)定義。表級(jí)約束出現(xiàn)在所有列定義

之后O

|第4章表和視圖

4.2.2表的五種約束

表共有五種約束,它們是主鍵、非空、惟一、檢查和外

鍵。

1.主鍵(PRIMARYKEY)

主鍵是表的主要完整性約束條件,主鍵惟一地標(biāo)識(shí)表的

每一行。一般情況下表都要定義主鍵,而且一個(gè)表只能定義

一個(gè)主鍵。主鍵可以包含表的一列或多列,如果包含表的多

列,則需要在表級(jí)定義。主鍵包含了主鍵每一列的非空約束

和主鍵所有列的惟一約束。主鍵一旦成功定義,系統(tǒng)將自動(dòng)

生成一個(gè)B*樹惟一索引,用于快速訪問主鍵列。比如圖書表

中用“圖書編號(hào)”列作主鍵,“圖書編號(hào)”可以惟一地標(biāo)識(shí)

圖書表的每一行。

第4章表和視圖

主鍵約束的語法如下:

[CONSTRANT約束名]PRIMARYKEY

--列級(jí)

[CONSTRANT約束名]PRIMARYKEY(列名1,列

名2,...)--表級(jí)

|第4章表和視圖

2.非空(NOTNULL)

非空約束指定某列不能為空,它只能在列級(jí)定義。在

默認(rèn)情況下,Oracle允許列的內(nèi)容為空值。比如“圖書名

稱”列要求必須填寫,可以為該列設(shè)置非空約束條件。

非空約束語法如下:

[CONSTRANT約束名]NOTNULL

--列級(jí)

3.(UNIQUE)

惟一約束條件要求表的一列或多列的組合內(nèi)容必須惟

一,即不相重,可以在列級(jí)或表級(jí)定義。但如果惟一約束

包含表的多列,則必須在表級(jí)定義。比如出版社表的“聯(lián)

系電話”不應(yīng)該重復(fù),可以為其定義惟一約束。

第4章表和視圖

惟一約束的語法如下:

[CONSTRANT約束名]UNIQUE

--列級(jí)

[CONSTRANT約束名]UNIQUE(列名1,列名2,...)

--表級(jí)

第4章表和視圖

4.檢查(CHECK)

檢查約束條件是用來定義表的一列或多列的一個(gè)

約束條件,使表的每一列的內(nèi)容必須滿足該條件(列的

內(nèi)容為空除外)。在CHECK條件中,可以調(diào)用

SYSDATE、USER等系統(tǒng)函數(shù)。一個(gè)列上可以定義多

個(gè)CHECK約束條件,一個(gè)CHECK約束可以包含一列

或多列。如果CHECK約束包含表的多列,則必須在表

級(jí)定義。比如圖書表的“單價(jià)”的值必須大于零,就

可以設(shè)置成CHECK約束條件。

第4章表和視圖

檢查約束的語法如下:

[CONSTRANT約束名]CHECK(約束條件)--歹U級(jí),約

束條件中只包含本列

[CONSTRANT約束名]CHECK(約束條件)一表級(jí),約

束條件中包含多列

5.外鍵(FOREIGNKEY)

指定表的一列或多列的組合作為外鍵,外鍵參照指定的

主鍵或惟一鍵。外鍵的值可以為NULL,如果不為NULL,

就必須是指定主鍵或惟一鍵的值之一。外鍵通常用來約束兩

個(gè)表之間的數(shù)據(jù)關(guān)系,這兩個(gè)表含有主鍵或惟一鍵的稱為主

表,定義外鍵的那張表稱為子表。如果外鍵只包含一列,則

可以在列級(jí)定義;如果包含多列,則必須在表級(jí)定義。

第4章表和視圖

外鍵的列的個(gè)數(shù)、列的數(shù)據(jù)類型和長度,應(yīng)該和

參照的主鍵或惟一鍵一致。比如圖書表的“出版社編

號(hào)”歹U,可以定義成外鍵,參照出版社表的“編號(hào)”

列,但“編號(hào)”列必須先定義成為主鍵或惟一鍵。如

果外鍵定義成功,則出版社表稱為主表,圖書表稱為

子表。在表的創(chuàng)建過程中,應(yīng)該先創(chuàng)建主表,后創(chuàng)建

子表。

|第4章表和視圖

外鍵約束的語法如下:

第一種語法,如果子記錄存在,則不允許刪除主記錄:

[CONSTRANT約束名]FOREIGNKEY(列名1,列名

2,…)REFERENCES表名(列名1,列名2,…)

第二種語法,如果子記錄存在,則刪除主記錄時(shí),級(jí)聯(lián)

刪除子記錄:

[CONSTRANT約束名]FOREIGNKEY(列名1,列名

2,…)REFERENCES表名(歹U名1,列名2,…)ondeletecascade

第4章表和視圖

第三種語法,如果子記錄存在,則刪除主記錄時(shí),

將子記錄置成空:

[CONSTRANT約束名]FOREIGNKEY(列名1,列

名2,...)REFERENCES表名(列名1,列名2,…)ondeleteset

null其中的表名為要參照的表名。

在以上5種約束的語法中,CONSTRANT關(guān)鍵字用

來定義約束名,如果省略,則系統(tǒng)自動(dòng)生成以SYS_開

頭的惟一約束名。約束名的作用是當(dāng)發(fā)生違反約束條

件的操作時(shí),系統(tǒng)會(huì)顯示違反的約束條件名稱,這樣

用戶就可以了解到發(fā)生錯(cuò)誤的原因。

迫.一

第4章表和視圖

4.2.3約束條件的創(chuàng)建

在表的創(chuàng)建語法中可以定義約束條件:

CREATETABLE表名(列名數(shù)據(jù)類型[DEFAULT表

達(dá)式][COLUMNCONSTRAINT],...

[TABLECONSTRAINT]

);

其中,COLUMNCONSTRAINT用來定義列級(jí)約束

條件;TABLECONSTRAINT用來定義表級(jí)約束條件。

第4章表和視圖

【訓(xùn)練1】創(chuàng)建帶有約束條件的出版社表(如果已經(jīng)存

在,先刪除):

CREATETABLE出版社(

編號(hào)VARCHAR2(2)CONSTRAINTPK_1PRIMARY

KEY,一

出版社名稱VARCHAR2(30)NOTNULL,

地址VARCHAR2(30)DEFAULT,未知;

聯(lián)系電話VARCHAR2(20)

);

執(zhí)行結(jié)果:

表已創(chuàng)建。

說明:出版社表的主鍵列是“編號(hào)”歹U,主鍵名為

PK_lo"出版社名稱”必須填寫,地址的默認(rèn)值為“未

知“。.

第4章表和視圖

【訓(xùn)練2】創(chuàng)建帶有約束條件(包括外鍵)的圖書表

(如果已經(jīng)存在,先刪除):

CREATETABLE圖書(圖書編號(hào)VARCHAR2(5)

CONSTRAINTPK_2PRIMARYKEY,

圖書名稱VARCHAR2(30)NOTNULL,

出版社編號(hào)VARCHAR2(2)CHECK(LENGTH(出

版社編號(hào)尸2)NOTNULL,

作者VARCHAR2(10)DEFAULT,未知;

出版日期DATEDEFAULT,。1-1月-1900;

第4章表和視圖

數(shù)量NUMBER(3)DEFAULT1CHECK(數(shù)量>0),

單價(jià)NUMBER4,2),

CONSTRAINTYS_1UNIQUE(圖書名稱,作者),

CONSTRAINTFK_1FOREIGNKEY(出版社編號(hào))

REFERENCES出版社(編號(hào))ONDELETECASCADE

);

執(zhí)行結(jié)果:

表已創(chuàng)建。

一」爬

第4章表和視圖

說明:因?yàn)閮蓚€(gè)表同屬于一個(gè)用戶,故約束名不能相

重,圖書表的主鍵為“圖書編號(hào)”歹U,主鍵名為PK_2。其

中,約束條件CHECK(LENGTH(出版社編號(hào)尸2)表示出版

社編號(hào)的長度必須是2,約束條件UNIQUE(圖書名稱,作者)

表示“圖書名稱”和“作者”兩列的內(nèi)容組合必須惟一。

FOREIGNKEY(出版社編號(hào))REFERENCES出版社(編號(hào))

表示圖書表的“出版社編號(hào)”列參照出版社的“編號(hào)”主

鍵列。出版社表為主表,圖書表為子表,出版社表必須先

創(chuàng)建。ONDELETECASCADE表示當(dāng)刪除出版社表的記錄

時(shí),圖書表中的相關(guān)記錄同時(shí)刪除,比如刪除清華大學(xué)出

版社,則圖書表中清華大學(xué)出版社的圖書也會(huì)被刪除。

如果同時(shí)出現(xiàn)DEFAULT和CHECK,則DEFAULT需要

出現(xiàn)在CHECK約束條件之前。

第4章表和視圖

【訓(xùn)練3】插入數(shù)據(jù),驗(yàn)證約束條件。

步驟1:插入出版社信息:

INSERTINTO出版社VALUESfOl;清華大學(xué)出版社?

北京;

執(zhí)行結(jié)果:

已創(chuàng)建1行。

繼續(xù)插入

INSERTINTO出版社VALUESC01;電子科技大學(xué)出版

社T西安);

執(zhí)行結(jié)果:

ERROR位于第1行:

ORA-00001:違反惟一約束條件(SCOTT.PK」)

第4章表和視圖

第二個(gè)插入語句違反約束條件PK」,即出版社表的主鍵

約束,原因是主鍵的值必須是惟一的。修改第二個(gè)語句的編

號(hào)為“02〃,重新執(zhí)行:

INSERTINTO出版社VALUES(,02?電子科技大學(xué)出版

社?西安

執(zhí)行結(jié)果:

已創(chuàng)建1行。

步驟2:插入圖書信息:

INSERTINTO圖書(圖書編號(hào),圖書名稱,出版社編號(hào),作

者,單價(jià))VALUESCA0001?計(jì)算機(jī)原理?01;劉勇:25.30);

執(zhí)行結(jié)果:

已創(chuàng)建1行。

第4章表和視圖

繼續(xù)插入:

INSERTINTO圖書(圖書編號(hào),圖書名稱,出版社編號(hào),

作者,單價(jià))VALUES(1A00027C語言程序設(shè)計(jì)馬麗:

18.75);

執(zhí)行結(jié)果:

ERROR位于第1行:

ORA-02291:違反完整約束條件(SCOTT.FK」)-未找到

父項(xiàng)關(guān)鍵字

第二個(gè)插入語句違反外鍵約束關(guān)系FK」,因?yàn)樵诔霭?/p>

社表中,被參照的主鍵列中沒有“03〃這個(gè)出版社,所以產(chǎn)

生未找到父項(xiàng)關(guān)鍵字的錯(cuò)誤,修改后重新插入:

第4章表和視圖

INSERTINTO圖書(圖書編號(hào),圖書名稱,出版社

編號(hào),作者,單價(jià))VALUES('A0002,,'C語言程序設(shè)

計(jì)‘,'02','馬麗’,18.75);

執(zhí)行結(jié)果:

已創(chuàng)建1行。

繼續(xù)插入:

INSERTINTO圖書(圖書編號(hào),圖書名稱,出版社編

號(hào),作者,數(shù)量,單價(jià))VALUESCA00031匯編語言程序設(shè)

計(jì)?02;黃海明:0,20.18);

i:渴上金--…

第4章表和視圖

執(zhí)行結(jié)果:

ERROR位于第1行:

ORA-02290:違反檢查約束條件

(SCOTT.SYS_C003114)

插入的數(shù)量為0,違反約束條件CHECK(數(shù)量>0)。

該約束條件沒有命名,所以約束名SYS_C003114為系

統(tǒng)自動(dòng)生成。修改后重新執(zhí)行:

INSERTINTO圖書(圖書編號(hào),圖書名稱,出版社編

號(hào),作者,數(shù)量,單價(jià))VALUES(,A0003;匯編語言程序設(shè)

計(jì)?02;黃海明:15,20.18);

第4章表和視圖

執(zhí)行結(jié)果:

已創(chuàng)建1行。

步驟3:顯示插入結(jié)果:

SELECT*FROM出版社;

執(zhí)行結(jié)果:

編號(hào)出版社名稱地址聯(lián)系電話

第4章表和視圖

01清華大學(xué)出版社北京010-

83456272

02電子科技大學(xué)出版社西安

繼續(xù)查詢:

SELECT*FROM圖書;

執(zhí)行結(jié)果:

圖書編號(hào)圖書名稱出版社編號(hào)作者出

版日期數(shù)量單價(jià)

第4章表和視圖

A0001計(jì)算機(jī)原理01劉勇01-1月-001

25.3

A0002C語言程序設(shè)計(jì)02馬麗01-1月-001

18.75

A0003匯編語言程序設(shè)計(jì)02黃海明01-1月-0015

20.18

步驟4:提交插入的數(shù)據(jù):

COMMIT;

執(zhí)行結(jié)果:

提交完成。

說明:在圖書表中,沒有插入的數(shù)量取默認(rèn)值1,沒有

插入的出版日期取默認(rèn)值01-1月-00(即1900年1月1日)。

第4章表和視圖

【訓(xùn)練4】通過刪除數(shù)據(jù)驗(yàn)證ONDELETE

CASCADE的作用。

步驟1:刪除出版社01(清華大學(xué)):

DELETEFROM出版社WHERE編號(hào)士01;

執(zhí)行結(jié)果:

已刪除1行。

第4章表和視圖

步驟2:顯示刪除結(jié)果:

顯示出版社表結(jié)果:

SELECT*FROM出版社;

執(zhí)行結(jié)果:

編號(hào)出版社名稱地址聯(lián)系電話

02電子科技大學(xué)出版社西/p>

顯示圖書表結(jié)果:

SELECT*FROM圖書;

第4章表和視圖

執(zhí)行結(jié)果:

圖書編號(hào)圖書名稱出版社編號(hào)作者出

版日期數(shù)量單價(jià)

AOOO2c語言程序設(shè)計(jì)02馬麗01-1月-001

18.75

A0003匯編語言程序設(shè)計(jì)02黃海明01-1月-00

1520.18

第4章表和視圖

步驟3:恢復(fù)刪除:

ROLLBACK;

回退已完成。

說明:參見訓(xùn)練2,外鍵約束FK_1帶有ON

DELETECASCAD選項(xiàng),刪除清華大學(xué)出版社時(shí),對(duì)

應(yīng)的圖書也自動(dòng)刪除。其他兩種情況用戶可自行驗(yàn)證。

【練習(xí)1】創(chuàng)建學(xué)生、系部表,添加必要主鍵、外

鍵等約束條件。

第4章表和視圖

4.2.4查看約束條件

數(shù)據(jù)字典USER_CONSTRAINTS中包含了當(dāng)前模式用

戶的約束條件信息。其中,CONSTRAINTS_TYPE顯示

的約束類型為:

C:CHECK約束。

P:PRIMARYKEY約束。

U:UNIQUE約束。

R:FOREIGNKEY約束。

其他信息可根據(jù)需要進(jìn)行查詢顯示,可用DESCRIBE

命令查看USER_CONSTRAINTS的結(jié)構(gòu)。

第4章表和視圖

【訓(xùn)練1】檢查表的約束信息:

SELECT

CONSTRAINT_NAME,CONSTRAINT_TYPE,SEARCH_CONDITI

ONFROMUSERCONSTRAINTS

WHERETABLENAME士圖書';

執(zhí)行結(jié)果:

CONSTRAINTNAMECSEARCHCONDITION

SYS_C003111C”圖書名稱“ISNOTNULL

SYS_C003112C”出版社編號(hào)“ISNOTNULL

SYS_C003113CLENGTH(出版社編號(hào))=2

SYS_C003114C數(shù)量>0

PK_2P

YS_1U

第4章表和視圖

說明:圖書表共有7個(gè)約束條件,一個(gè)PRIMARY

KEY(P)約束PK2,一個(gè)FOREIGNKEY(R)約束FK1,一

個(gè)UNIQUE(R)約束YS_1和4個(gè)CHECK(C)約束

SYS_C003111>SYS_C003112>SYS_C003113

和SYS_C003114,4個(gè)CHECK約束的名字是由系統(tǒng)命

名的。

第4章表和視圖

4.2.5使約束生效和失效

約束的作用是保護(hù)數(shù)據(jù)完整性,但有的時(shí)候約束的條

件可能不再適用或沒有必要,如果這個(gè)約束條件依然發(fā)生

作用就會(huì)影響操作的效率,比如導(dǎo)出和導(dǎo)入數(shù)據(jù)時(shí)要暫時(shí)

關(guān)閉約束條件,這時(shí)可以使用下面的命令關(guān)閉或打開約束

條件。

使約束條件失效:

ALTERTABLE表名DISABLECONSTRANT約束名;

使約束條件生效:

ALTERTABLE表名ENABLECONSTRANT約束名;

第4章表和視圖

【訓(xùn)練1】使圖書表的數(shù)量檢查失效。

步驟1:使約束條件SYS_C003114(數(shù)量>0)失效:

ALTERTABLE圖書DISABLECONSTRAINT

SYS_C003114;

執(zhí)行結(jié)果:

表已更改。

步驟2:修改數(shù)量為0:

UPDATE圖書SET數(shù)量=0WHERE圖書編號(hào)與A000P;

執(zhí)行結(jié)果:

已更新1行。

__

第4章表和視圖

步驟3:使約束條件SYS_C003114生效:

ALTERTABLE圖書ENABLECONSTRAINT

SYS_C003114;

執(zhí)行結(jié)果:

ERROR位于第1行:

ORA-02293:無法驗(yàn)證(SCOTT.SYS_C003114)-違反檢

查約束條件

繼續(xù)執(zhí)行:

UPDATE圖書SET數(shù)量=5WHERE圖書編號(hào)士A000P;

執(zhí)行結(jié)果:

已更新1行。

第4章表和視圖

繼續(xù)執(zhí)行:

ALTERTABLE圖書ENABLECONSTRAINT

SYS_C003114;

執(zhí)行結(jié)果:

表已更改。

說明:在步驟1中,先使名稱為SYS_C003114(數(shù)

量>0)的檢查條件暫時(shí)失效,所以步驟2修改第1條記錄

的數(shù)量為0才能成功。步驟3使該約束條件重新生效,

但因?yàn)楸碇杏袛?shù)據(jù)不滿足該約束條件,所以發(fā)生錯(cuò)誤,

通過修改第一條記錄的數(shù)量為5,使約束條件重新生效。

第4章表和視圖

4.3修改表結(jié)構(gòu)

4.3.1增加新列

增加新列的語法如下:

ALTERTABLE表名

ADD列名數(shù)據(jù)類型[DEFAULT表達(dá)式][COLUMN

CONSTRAINT];

如果要為表同時(shí)增加多列,可以按以下格式進(jìn)行:

ALTERTABLE表名

ADD(歹ij名數(shù)據(jù)類型[DEFAULT表達(dá)式][COLUMN

CONSTRAINT]...);

第4章表和視圖

通過增加新列可以指定新列的數(shù)據(jù)類型、寬度、默認(rèn)值

和約束條件。增加的新列總是位于表的最后。假如新列定義

了默認(rèn)值,則新列的所有行自動(dòng)填充默認(rèn)值。對(duì)于有數(shù)據(jù)的

表,新增加列的值為NULL,所以有數(shù)據(jù)的表,新增加列不

能指定為NOTNULL約束條件。

【訓(xùn)練1】為“出版社”增加一列“電子郵件”:

ALTERTABLE出版社

ADD電子郵件VARCHAR2(30)CHECK(電子郵件LIKE

%@%)

顯示結(jié)果:

表已更改。

?X

第4章表和視圖

說明:為出版社新增加了一列“電子郵件”,數(shù)

據(jù)類型為VARCHAR2,寬度為30。CHECK(電子郵件

LIKE%@%,)表示電子郵件中必須包含字符“@〃。可

用DESCRIBE命令查看表的新結(jié)構(gòu)。

第4章表和視圖

4.3.2修改列

修改列的語法如下:

ALTERTABLE表名

MODIFY列名數(shù)據(jù)類型[DEFAULT表達(dá)式][COLUMN

CONSTRAINT]

如果要對(duì)表同時(shí)修改多列,可以按以下格式進(jìn)行:

ALTERTABLE表名

MODIFY(列名數(shù)據(jù)類型[DEFAULT表達(dá)式][COLUMN

CONSTRAINT]...);

其中,列名是要修改的列的標(biāo)識(shí),不能修改。如果要改

變列名,只能先刪除該列,然后重新增加。其他部分都可以

進(jìn)行修改,如果沒有給出新的定義,表示該部分屬性不變。

第4章表和視圖

修改列定義還有以下一些特點(diǎn):

(1)列的寬度可以增加或減小,在表的列沒有數(shù)據(jù)

或數(shù)據(jù)為NULL時(shí)才能減小寬度。

(2)在表的列沒有數(shù)據(jù)或數(shù)據(jù)為NULL時(shí)才能改變

數(shù)據(jù)類型,CHAR和VARCHAR2之間可以隨意轉(zhuǎn)換。

(3)只有當(dāng)列的值非空時(shí),才能增加約束條件NOT

NULLo

(4)修改列的默認(rèn)值,只影響以后插入的數(shù)據(jù)。

第4章表和視圖

【訓(xùn)練1】修改“出版社”表“電子郵件”列的

寬度為40。

ALTERTABLE出版社

MODIFY電子郵件VARCHAR2(40);

執(zhí)行結(jié)果:

表已更改。

說明:將“電子郵件”列的寬度由原來的30修改

為40,約束條件保持不變。可用DESCRIBE命令查看

新結(jié)構(gòu)。

第4章表和視圖

4.3.3刪除列

刪除列的語法如下:

ALTERTABLE表名

DROPCOLUMN歹U名[CASCADE

CONSTRAINTS];

如果要同時(shí)刪除多列,可以按以下格式進(jìn)行:

ALTERTABLE表名

DROP(COLUMN列名數(shù)據(jù)類型[DEFAULT表達(dá)

式][COLUMNCONSTRAINT]...)

[CASCADECONSTRAINTS];

當(dāng)刪除列時(shí),列上的索引和約束條件同時(shí)被刪除。

但如果列是多列約束的一部分,則必須指定CASCADE

CONSTRAINTS才能刪除約束條件。

第4章表和視圖

【訓(xùn)練1】刪除“出版社”表的“電子郵件”列。

ALTERTABLE出版社

DROPCOLUMN電子郵件;

執(zhí)行結(jié)果:

表已更改。

說明:此訓(xùn)練將“電子郵件”列刪除??捎?/p>

DESCRIBE命令查看新結(jié)構(gòu)。

第4章表和視圖

使用以下語法,可以將列置成UNUSED狀態(tài),這

樣就不會(huì)在表中顯示出該列:

ALTERTABLE表名SETUNUSEDCOLUMN歹U

名[CASCADECONSTRAINTS];

以后可以重新使用或刪除該列。通過數(shù)據(jù)字典可

以查看標(biāo)志成UNUSED的列。

刪除標(biāo)志成UNUSED的列:

ALTERTABLE表名DROPUNUSEDCOLUMNS;

第4章表和視圖

【訓(xùn)練2】將“圖書”表的“出版日期”列置成

UNUSED,并查看。

步驟1:設(shè)置“出版日期”歹U為UNUSED:

ALTERTABLE圖書SETUNUSEDCOLUMN出版日期;

步驟2:顯示結(jié)構(gòu):

DESC圖書;

執(zhí)行結(jié)果:

名稱是否為空?類型

第4章表和視圖

圖書編號(hào)NOTNULLVARCHAR2(5)

圖書名稱NOTNULLVARCHAR2(30)

出版社編號(hào)NOTNULLVARCHAR2(2)

作者VARCHAR2(10)

數(shù)量NUMBER(3)

單價(jià)NUMBER(7,2)

步驟3:冊(cè)[J除UNUSED歹U:

ALTERTABLE圖書DROPUNUSEDCOLUMNS;

執(zhí)行結(jié)果:

表已更改。

第4章表和視圖

4.3.4約束條件的修改

可以為表增加或刪除表級(jí)約束條件。

1.增加約束條件

增加約束條件的語法如下:

ALTERTABLE表名ADD[CONSTRAINT約束名]表級(jí)

約束條件;

【訓(xùn)練1】為emp表的mgr列增加外鍵約束:

ALTERTABLEempADDCONSTRAINTFK_3

FOREIGNKEY(mgr)REFERENCESemp(empno);一

執(zhí)行結(jié)果:

表已更改。

說明:本訓(xùn)練增加的外鍵為參照自身的外鍵,含義是

mgr(經(jīng)理編號(hào))列的內(nèi)容必須是empno(雇員編號(hào))之一。

第4章表和視圖

2.刪除約束條件

刪除約束條件的語法如下:

ALTERTABLE表名

DROPPRIMARY_KEY|UNIQUE(列

名[CONSTRAINT約束名[CASCADE];

【訓(xùn)I練2】刪除為emp表的mgr列增加的外鍵約束:

ALTERTABLEempDROPCONSTRAINTFK_3;

執(zhí)行結(jié)果:

表已更改。

第4章表和視圖

4.4分區(qū)表簡介

4.4.1分區(qū)的作用

在某些場合會(huì)使用非常大的表,比如人口信息統(tǒng)

計(jì)表。如果一個(gè)表很大,就會(huì)降低查詢的速度,并增

加管理的難度。一旦發(fā)生磁盤損壞,可能整個(gè)表的數(shù)

據(jù)就會(huì)丟失,恢復(fù)比較困難。根據(jù)這一情況,可以創(chuàng)

建分區(qū)表,把一個(gè)大表分成幾個(gè)區(qū)(小段),對(duì)數(shù)據(jù)的操

作和管理都可以針對(duì)分區(qū)進(jìn)行,這樣就可以提高數(shù)據(jù)

庫的運(yùn)行效率。分區(qū)可以存在于不同的表空間上,提

高了數(shù)據(jù)的可用性。

第4章表和視圖

分區(qū)的依據(jù)可以是一列或多列的值,這一列或多列稱為分

區(qū)關(guān)鍵字或分區(qū)列。

所有分區(qū)的邏輯屬性是一樣的(列名、數(shù)據(jù)類型、約束條

件等),但每個(gè)分區(qū)可以有自己的物理屬性(表空間、存儲(chǔ)參數(shù)

等)。

分區(qū)有三種:范圍分區(qū)、哈斯分區(qū)和混合分區(qū)。

范圍分區(qū)(RANGEPARTITIONING):根據(jù)分區(qū)關(guān)鍵字值

的范圍建立分區(qū)。比如,根據(jù)省份為人口數(shù)據(jù)表建立分區(qū)。

哈斯分區(qū)(HASHPARTITIONING):在分區(qū)列上使用

HASH算法進(jìn)行分區(qū)。

混合分區(qū)(COMPOSITEPARTITIONING):混合以上兩種

方法,使用范圍分區(qū)建立主分區(qū),使用HASH算法建立子分區(qū)。

第4章表和視圖

4.4.2分區(qū)的實(shí)例

由于分區(qū)用到了很多存儲(chǔ)參數(shù),故不在這里進(jìn)行

詳細(xì)討論,只給出一個(gè)范圍分區(qū)的簡單訓(xùn)練實(shí)例。

【訓(xùn)練1】創(chuàng)建和使用分區(qū)表。

步驟1:創(chuàng)建按成績分區(qū)的考生表,共分為3個(gè)區(qū):

CREATETABLE考生(

考號(hào)VARCHAR2(5),

姓名VARCHAR2(30),

成績NUMBER(3)

)

第4章表和視圖

PARTITIONBYRANGE(成績)

(PARTITIONAVALUESLESSTHAN(300)

TABLESPACEUSERS,

PARTITIONBVALUESLESSTHAN(500)

TABLESPACEUSERS,

PARTITIONCVALUESLESSTHAN

(MAXVALUE)

TABLESPACEUSERS

);

?2:—,,

第4章表和視圖

步驟2:插入不同成績的若干考生:

INSERTINTO考生VALUES(100011王明;280);

INSERTINTO考生VALUES(10002;李亮:730);

INSERTINTO考生VALUES。10003;趙成:550);

INSERTINTO考生VALUES。10004;黃凱:490);

INSERTINTO考生VALUES(100051馬新;360);

INSERTINTO考生VALUES('10006','楊麗',670);

第4章表和視圖

步驟3:檢查A區(qū)中的考生:

SELECT*FROM考生PARTITION(A);

執(zhí)行結(jié)果:

考號(hào)姓名成績

10001王明280

步驟4:檢查全部的考生:

SELECT*FROM考生;

執(zhí)行結(jié)果:

考號(hào)姓名成績

第4章表和視圖

10001王明280

10004黃凱490

10005馬新360

10002李亮730

10003趙成550

10006楊麗670

說明:共創(chuàng)建A、B、C三個(gè)區(qū),A區(qū)的分?jǐn)?shù)范圍為300

分以下,B區(qū)的分?jǐn)?shù)范圍為300至500分,C區(qū)的分?jǐn)?shù)范圍為

500分以上。共插入6名考生,插入時(shí)根據(jù)考生分?jǐn)?shù)將自動(dòng)

插入不同的區(qū)。

第4章表和視圖

4.5視圖創(chuàng)建和操作

4.5.1視圖的概念

視圖是基于一張表或多張表或另外一個(gè)視圖的邏輯

表。視圖不同于表,視圖本身不包含任何數(shù)據(jù)。表是實(shí)際

獨(dú)立存在的實(shí)體,是用于存儲(chǔ)數(shù)據(jù)的基本結(jié)構(gòu)。而視圖只

是一種定義,對(duì)應(yīng)一個(gè)查詢語句。視圖的數(shù)據(jù)都來自于某

些表,這些表被稱為基表。通過視圖來查看表,就像是從

不同的角度來觀察一個(gè)(或多個(gè))表。

視圖有如下一些優(yōu)點(diǎn):

*可以提高數(shù)據(jù)訪問的安全性,通過視圖往往只可以

訪問數(shù)據(jù)庫中表的特定部分,限制了用戶訪問表的全部行

和列。

第4章表和視圖

*簡化了對(duì)數(shù)據(jù)的查詢,隱藏了查詢的復(fù)雜性。視圖

的數(shù)據(jù)來自一個(gè)復(fù)雜的查詢,用戶對(duì)視圖的檢索卻很簡單。

*一個(gè)視圖可以檢索多張表的數(shù)據(jù),因此用戶通過訪

問一個(gè)視圖,可完成對(duì)多個(gè)表的訪問。

*視圖是相同數(shù)據(jù)的不同表示,通過為不同的用戶創(chuàng)

建同一個(gè)表的不同視圖,使用戶可分別訪問同一個(gè)表的不

同部分。

視圖可以在表能夠使用的任何地方使用,但在對(duì)視圖

的操作上同表相比有些限制,特別是插入和修改操作。對(duì)

視圖的操作將傳遞到基表,所以在表上定義的約束條件和

觸發(fā)器在視圖上將同樣起作用。

第4章表和視圖

4.5.2視圖的創(chuàng)建

創(chuàng)建視圖需要CREAEVIEW系統(tǒng)權(quán)限,視圖的創(chuàng)建語法如

下:

CREATE[ORREPLACE][FORCE|NOFORCE]VIEW視圖

名[(別名1[,別名2…[)]

AS子查詢

[WITHCHECKOPTION[CONSTRAINT約束名]]

[WITHREADONLY]

其中:

ORREPLACE表示替代已經(jīng)存在的視圖。

FORCE表示不管基表是否存在,創(chuàng)建視圖。

NOFORgp表示只有基表存在時(shí),才創(chuàng)建視圖,是默認(rèn)值。

第4章表和視圖

別名是為子查詢中選中的列新定義的名字,替代查詢表

中原有的列名。

子查詢是一個(gè)用于定義視圖的SELECT查詢語句,可以

包含連接、分組及子查詢。

WITHCHECKOPTION表示進(jìn)行視圖插入或修改時(shí)必須

滿足子查詢的約束條件。后面的約束名是該約束條件的名字。

WITHREADONLY表示視圖是只讀的。

刪除視圖的語法如下:

DROPVIEW視圖名;

刪除視圖者需要是視圖的建立者或者擁有DROPANY

VIEW權(quán)限。視圖的刪除不影響基表,不會(huì)丟失數(shù)據(jù)。

第4章表和視圖

1.創(chuàng)建簡單視圖

【訓(xùn)練1】創(chuàng)建圖書作者視圖。

步驟1:創(chuàng)建圖書作者視圖:

CREATEVIEW圖書作者(書名,作者)

ASSELECT圖書名稱,作者FROM圖書;

輸出結(jié)果:

視圖已建立。

步驟2:查詢視圖全部內(nèi)容

SELECT*FROM圖書作者;

輸出結(jié)果:

書名作者

第4章表和視圖

計(jì)算機(jī)原理劉勇

C語言程序設(shè)計(jì)馬麗

匯編語言程序設(shè)計(jì)黃海明

步驟3:查詢部分視圖:

SELECT作者FROM圖書作者;

輸出結(jié)果:

作者

劉勇

馬麗

黃海明

第4章表和視圖

說明:本訓(xùn)練創(chuàng)建的視圖名稱為“圖書作者”,

視圖只包含兩列,為“書名”和“作者”,對(duì)應(yīng)圖書

表的“圖書名稱”和“作者”兩列。如果省略了視圖

名稱后面的列名,則視圖會(huì)采用和表一樣的列名。對(duì)

視圖查詢和對(duì)表查詢一樣,但通過視圖最多只能看到

表的兩列,可見視圖隱藏了表的部分內(nèi)容。

第4章表和視圖

【訓(xùn)練2】創(chuàng)建清華大學(xué)出版社的圖書視圖。

步驟1:創(chuàng)建清華大學(xué)出版社的圖書視圖:

CREATEVIEW清華圖書

ASSELECT圖書名稱,作者,單價(jià)FROM圖書

WHERE出版社編號(hào)=DP;

執(zhí)行結(jié)果:

視圖已建立。

步驟2:查詢圖書視圖:

SELECT*FROM清華圖書;

執(zhí)行結(jié)果:

圖書名稱作者單價(jià)

第4章表和視圖

計(jì)算機(jī)原理劉勇25.3

步驟3:刪除視圖:

DROPVIEW清華圖書;

執(zhí)行結(jié)果:

視圖已丟掉。

說明:該視圖包含了對(duì)記錄的約束條件。

【練習(xí)1】創(chuàng)建部門30的雇員名稱和職務(wù)的視圖,并查

詢。

【練習(xí)2】創(chuàng)建職務(wù)為“MANAGER〃的雇員名稱和工資

的視圖,并查詢。

第4章表和視圖

2.創(chuàng)建復(fù)雜視圖

【訓(xùn)練3】修改作者視圖,加入出版社名稱。

步驟1:重建圖書作者視圖:

CREATEORREPLACEVIEW圖書作者(書名,作

者,出版社)

ASSELECT圖書名稱,作者,出版社名稱FROM圖

書,出版社

WHERE圖書.出版社編號(hào)=出版社.編號(hào);

輸出結(jié)果:

視圖已建立。

第4章表和視圖

步驟2:查詢新視圖內(nèi)容:

SELECT*FROM圖書作者;

輸出結(jié)果:

書名作者出版社

計(jì)算機(jī)原理劉勇清華大學(xué)出版社

C語言程序設(shè)計(jì)馬麗電子科技大學(xué)出版社

匯編語言程序設(shè)計(jì)黃海明電子科技大學(xué)出版社

說明:本訓(xùn)練中,使用了ORREPLACE選項(xiàng),使新的視

圖替代了同名的原有視圖,同時(shí)在查詢中使用了相等連接,

使得視圖的列來自于兩個(gè)不同的基表。

第4章表和視圖

【訓(xùn)練4】創(chuàng)建一個(gè)統(tǒng)計(jì)視圖。

步驟1:創(chuàng)建emp表的一個(gè)統(tǒng)計(jì)視圖:

CREATEVIEW統(tǒng)計(jì)表(部門名,最大工資,最小工資,平

均工資)

ASSELECT

DNAME,MAX(SAL),MIN(SAL),AVG(SAL)FROMEMP

E,DEPTD

WHEREE.DEPTNO=D.DEPTNOGROUPBYDNAME;

執(zhí)行結(jié)果:

視圖已建立。

第4章表和視圖

步驟2:查詢統(tǒng)計(jì)表:

SELECT*FROM統(tǒng)計(jì)表;

執(zhí)行結(jié)果:

部門名最大工資最小工資平均工資

ACCOUNTING500013003050

RESEARCH30008002175

SALES28509501566.66667

說明:本訓(xùn)練中,使用了分組查詢和連接查詢作為視

圖的子查詢,每次查詢?cè)撘晥D都可以得到統(tǒng)計(jì)結(jié)果。

第4章表和視圖

3.創(chuàng)建只讀視圖

創(chuàng)建只讀視圖要用WITHREADONLY選項(xiàng)。

【訓(xùn)練5】創(chuàng)建只讀視圖。

步驟1:創(chuàng)建emp表的經(jīng)理視圖:

CREATEORREPLACEVIEWmanager

ASSELECT*FROMempWHEREjob=

?MANAGER'

WITHREADONLY;

執(zhí)行結(jié)果:

視圖已建立。

|第4章表和視圖

步驟2:進(jìn)行刪除:

DELETEFROMmanager;

執(zhí)行結(jié)果:

ERROR位于第1行:

ORA-01752:不能從沒有一個(gè)鍵值保存表的視圖中刪除

4.創(chuàng)建基表不存在的視圖

正常情況下,不能創(chuàng)建錯(cuò)誤的視圖,特別是當(dāng)基表還不

存在時(shí)。但使用FORCE選項(xiàng)就可以在創(chuàng)建基表前先創(chuàng)建視

圖。創(chuàng)建的視圖是無效視圖,當(dāng)訪問無效視圖時(shí),Oracle將

重新編譯無效的視圖。

一一^_____

第4章表和視圖

【訓(xùn)練6】使用FORCE選項(xiàng)創(chuàng)建帶有錯(cuò)誤的視圖:

CREATEFORCEVIEW班干部ASSELECT*FROM

班級(jí)WHERE職務(wù)ISNOTNULL;

執(zhí)行結(jié)果:

警告:創(chuàng)建的視圖帶有編譯錯(cuò)誤。

4.5.3視圖的操作

對(duì)視圖經(jīng)常進(jìn)行的操作是查詢操作,但也可以在一定

條件下對(duì)視圖進(jìn)行插入、刪除和修改操作。對(duì)視圖的這些

操作最終傳遞到基表。但是對(duì)視圖的操作有很多限定。如

果視圖設(shè)置了只讀,則對(duì)視圖只能進(jìn)行查詢,不能進(jìn)行修

改操作。

第4章表和視圖

1.視圖的插入

【訓(xùn)練1】視圖插入練習(xí)。

步驟1:創(chuàng)建清華大學(xué)出版社的圖書視圖:

CREATEORREPLACEVIEW清華圖書

ASSELECT*FROM圖書WHERE出版社編號(hào)=

'01';

執(zhí)行結(jié)果:

視圖已建立。

第4章表和視圖

步驟2:插入新圖書:

INSERTINTO清華圖書VALUESCA00051軟件工程?011

馮娟;5,27.3);

執(zhí)行結(jié)果:

已創(chuàng)建1行。

步驟3:顯示視圖:

SELECT*FROM清華圖書;

執(zhí)行結(jié)果:

圖書圖書名稱出作者數(shù)量單價(jià)

A0001計(jì)算機(jī)原理01劉勇525.3

A0005軟件工程01馮娟527.3

第4章表和視圖

步驟4:顯示基表

SELECT*FROM圖書;

執(zhí)行結(jié)果:

圖書圖書名稱出作者數(shù)量單價(jià)

A0001計(jì)算機(jī)原理01劉勇525.3

A0002C語言程序設(shè)計(jì)02馬麗118.75

A0003匯編語言程序設(shè)計(jì)02黃海明1520.18

A0005軟件工程01馮娟527.3

第4章表和視圖

說明:通過查看視圖,可見新圖書插入到了視圖

中。通過查看基表,看到該圖書也出現(xiàn)在基表中,說

明成功地進(jìn)行了插入。新圖書的出版社編號(hào)為"01%

仍然屬于“清華大學(xué)出版社”。

但是有一個(gè)問題,就是如果在“清華圖書”的視

圖中插入其他出版社的圖書,結(jié)果會(huì)怎么樣呢?結(jié)果

是允許插入,但是在視圖中看不見,在基表中可以看

見,這顯然是不合理的。

第4章表和視圖

2.使用WITHCHECKOPTION選項(xiàng)

為了避免上述情況的發(fā)生,可以使用WITHCHECK

OPTION選項(xiàng)。使用該選項(xiàng),可以對(duì)視圖的插入或更新

進(jìn)行限制,即該數(shù)據(jù)必須滿足視圖定義中的子查詢中的

WHERE條件,否則不允許插入或更新。比如“清華圖

書”視圖的WHERE條件是出版社編號(hào)要等于“01〃(01

是清華大學(xué)出版社的編號(hào)),所以如果設(shè)置了WITH

CHECKOPTION選項(xiàng),那么只有出版社編號(hào)為“01〃的

圖書才能通過清華視圖進(jìn)行插入。

第4章表和視圖

【訓(xùn)練2】使用WITH

溫馨提示

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

評(píng)論

0/150

提交評(píng)論