




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校食堂人員培訓(xùn)規(guī)范與管理指南
- 物流行業(yè)原料采購合同范文
- 整體家居戰(zhàn)略市場規(guī)劃報(bào)告
- 小孩改名申請(qǐng)書的家長建議
- 公共交通建設(shè)進(jìn)度管理方案
- 航空制造業(yè)流程控制體系
- 國家自然科學(xué)基金青年科學(xué)基金申請(qǐng)書撰寫技巧
- 交通運(yùn)輸安全員職責(zé)說明
- 學(xué)校團(tuán)隊(duì)建設(shè)的職責(zé)與任務(wù)
- 公共設(shè)施亮化工程的實(shí)施與控制措施
- 2024電動(dòng)牙刷行業(yè)洞察
- 高校教師組織生活發(fā)言稿
- 法學(xué)法律實(shí)務(wù)課程設(shè)計(jì)
- 【《“一帶一路”背景下我國海外勞工保護(hù)存在的主要問題探析綜述》5300字】
- 《中國服飾史》-沈從文等
- 北京市2023-2024學(xué)年七年級(jí)下學(xué)期期中語文試題(含含答案)
- 五年級(jí)下英語教案-Lesson 5 What Are They Doing-冀教版
- 2024年高中英語衡水體書法練字字帖
- 工程項(xiàng)目質(zhì)量風(fēng)險(xiǎn)源識(shí)別及管控措施
- 學(xué)前班語言《貓醫(yī)生過河》課件
- 小學(xué)數(shù)學(xué)學(xué)科現(xiàn)狀分析與對(duì)策
評(píng)論
0/150
提交評(píng)論