官术网_书友最值得收藏!

3.3 數據定義

視頻二維碼(掃碼觀看)

SQL的數據定義功能:模式定義、表定義、視圖和索引的定義。

3.3.1 模式的定義與刪除

一、定義模式

【例1】定義一個學生-課程模式S-T

CREATE SCHEMA“S-T”AUTHORIZATION WANG;

為用戶WANG定義了一個模式S-T

【例2】CREATE SCHEMA AUTHORIZATION WANG;

<模式名>隱含為用戶名WANG

·如果沒有指定<模式名>,那么<模式名>隱含為<用戶名>。

◆定義模式實際上定義了一個命名空間。

◆在這個空間中可以定義該模式包含的數據庫對象,例如基本表、視圖、索引等。

◆在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。

CREATE SCHEMA<模式名>AUTHORIZATION<用戶名>[<表定義子句>|<視圖定義子句>|<授權定義子句>];

【例3】

為用戶ZHANG創建了一個模式TEST,并在其中定義了一個表TAB1。

二、刪除模式

◆DROP SCHEMA <模式名>

<CASCADE|RESTRICT>

CASCADE(級聯)

刪除模式的同時把該模式中所有的數據庫對象全部刪除。

RESTRICT(限制)

如果該模式中定義了下屬的數據庫對象(如表、視圖等),則拒絕該刪除語句的執行。

當該模式中沒有任何下屬的對象時才能執行。

【例4】DROP SCHEMA ZHANG CASCADE;

刪除模式ZHANG,同時該模式中定義的表TAB1也被刪除。

3.3.2 基本表的定義、刪除與修改

一、定義基本表

如果完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級。

1學生表Student

【例5】建立“學生”表Student,學號是主碼,姓名取值惟一

2課程表Course

【例6】建立一個“課程”表Course

3學生選課表SC

【例7】建立一個“學生選課”表SC

二、數據類型

◆SQL中域的概念用數據類型來實現

◆定義表的屬性時需要指明其數據類型及長度

◆選用哪種數據類型

·取值范圍

·要做哪些運算

表3-2 數據類型及含義

三、模式與表

◆每一個基本表都屬于某一個模式

◆一個模式包含多個基本表

◆定義基本表所屬模式

·方法一:在表名中明顯地給出模式名

·方法二:在創建模式語句中同時創建表

·方法三:設置所屬的模式

◆創建基本表(其他數據庫對象也一樣)時,若沒有指定模式,系統根據搜索路徑來確定該對象所屬的模式。

◆RDBMS會使用模式列表中第一個存在的模式作為數據庫對象的模式名。

◆若搜索路徑中的模式名都不存在,系統將給出錯誤。

◆顯示當前的搜索路徑:

SHOW search_path;

◆搜索路徑的當前默認值是:

$user,PUBLIC;

◆DBA用戶可以設置搜索路徑,然后定義基本表

SET search_path TO “S-T” PUBLIC;

Create table Student(……);

結果建立了S-T.Student基本表。

RDBMS發現搜索路徑中第一個模式名S-T存在,就把該模式作為基本表Student所屬的模式。

四、修改基本表

【例8】向Student表增加“入學時間”列,其數據類型為日期型。

ALTER TABLE Student ADD S_entrance DATE;

◆不論基本表中原來是否已有數據,新增加的列一律為空值。

【例9】將年齡的數據類型由字符型(假設原來的數據類型是字符型)改為整數。

ALTER TABLE Student ALTER COLUMN Sage INT;

【例10】增加課程名稱必須取惟一值的約束條件。

ALTER TABLE Course ADD UNIQUE(Cname);

五、刪除基本表

DROP TABLE <表名>[RESTRICT| CASCADE];

◆RESTRICT:刪除表是有限制的。

欲刪除的基本表不能被其他表的約束所引用

如果存在依賴該表的對象,則此表不能被刪除

◆CASCADE:刪除該表沒有限制。

在刪除基本表的同時,相關的依賴對象一起刪除

【例11】刪除Student表

DROP TABLE Student CASCADE;

◆基本表定義被刪除,數據被刪除

◆表上建立的索引、視圖、觸發器等一般也將被刪除

【例12】若表上建有視圖,選擇RESTRICT時表不能刪除

【例13】如果選擇CASCADE時可以刪除表,視圖也自動被刪除

表3-3 DROP TABLE時,SQL99與3個RDBMS的處理策略比較

3.3.3 索引的建立與刪除

◆建立索引的目的:加快查詢速度。

◆誰可以建立索引:

DBA或表的屬主(即建立表的人);

DBMS一般會自動建立以下列上的索引:

PRIMARY KEY;

UNIQUE;

◆誰維護索引:DBMS自動完成。

◆使用索引:DBMS自動選擇是否使用索引以及使用哪些索引。

一、索引

◆RDBMS中索引一般采用B+樹、HASH索引來實現。

B+樹索引具有動態平衡的優點。

HASH索引具有查找速度快的特點。

◆采用B+樹還是HASH索引則由具體的RDBMS來決定。

◆索引是關系數據庫的內部實現技術,屬于內模式的范疇。

◆CREATE INDEX語句定義索引時,可以定義索引是惟一索引、非惟一索引或聚簇索引。

二、建立索引

◆語句格式

CREATE [UNIQUE] [CLUSTER] INDEX<索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>]]…);

【例14】

CREATE CLUSTER INDEX Stusname ON Student(Sname);

在Student表的Sname(姓名)列上建立一個聚簇索引

◆在最經常查詢的列上建立聚簇索引以提高查詢效率

◆一個基本表上最多只能建立一個聚簇索引

◆經常更新的列不宜建立聚簇索引

【例15】為學生-課程數據庫中的Student,Course,SC三個表建立索引。

Student表按學號升序建惟一索引;

Course表按課程號升序建惟一索引;

SC表按學號升序和課程號降序建惟一索引。

三、刪除索引

DROP INDEX <索引名>;

刪除索引時,系統會從數據字典中刪去有關該索引的描述。

【例16】刪除Student表的Stusname索引

DROP INDEX Stusname;

主站蜘蛛池模板: 农安县| 石河子市| 疏勒县| 孝义市| 望江县| 得荣县| 石景山区| 利津县| 浦北县| 马公市| 齐齐哈尔市| 连州市| 南汇区| 宜黄县| 邵阳市| 华亭县| 敦煌市| 两当县| 穆棱市| 墨玉县| 武威市| 惠州市| 盘锦市| 衡东县| 岱山县| 台中市| 北安市| 罗定市| 堆龙德庆县| 沙湾县| 临沭县| 西畴县| 惠东县| 苗栗市| 白城市| 平昌县| 双桥区| 临颍县| 五指山市| 鹤壁市| 四川省|