數據庫之數據定義


SQL中的數據定義功能包括模式定義、表定義、視圖定義、索引的定義。下面對以上操作一一總結:


 

1、模式的定義與刪除

“模式”是一個數據庫的命名空間,一個框架,打個比方:在java中,創建模式相當於創建一個包,而創建表相當於創建一個類,一個類是在某一個包下面進行管理的。在mysql中,創建模式與創建數據庫是一樣的,也就是create schema <模式名>與 create database <數據庫名>是等效的。所以模式的定義與刪除語句如下:

create schema <模式名> authorization <用戶名>,例如創建一個學生-課程的模式S-T

create schema "S-T" authorization wang;//為用戶wang創建一個模式S-T

刪除模式語句如下:

drop schema <模式名> <cascade|restrict>

其中cascade與restrict兩者必選其一。

cascade(級聯),表示刪除模式的同時,把該模式中的所有數據庫對象(例如表等)也全部刪除。

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


 

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

表的定義基本格式如下:

create table<表名>(

<列名> <數據類型> [列級完整性約束條件],

<列名> <數據類型> [列級完整性約束條件],

<列名> <數據類型> [列級完整性約束條件]

);

例如創建學生的選課表:

create table SC(

Sno char(9),

Cno char(4),

Sname char(20) unique,//取唯一值

primary key(Sno,Cno),//主碼由兩個屬性構成,須作為表級完整性進行定義

foreign key(Sno) references Student(Sno),//表級完整性約束,Sno是外碼,被參照的表是Student

foreign key(Cno) references Course(Cno)//表級完整性約束,Cno是外碼,被參照的表是Coruse

);

刪除基本表的定義如下:

drop table<表名>[restrict|cascade];

如果選擇restrict,則該表的刪除是有限制條件的。待刪除的基本表不能被其他的約束所引用(如check,foreign key等約束),不能有視圖,不能有觸發器(trigger),不能有存儲過程或函數等。

如果是cascade,則該表的刪除沒有限制條件。在刪除表的同時,相關的依賴對象,例如視圖,也將一並刪除。

修改基本表的一般格式如下:

alter table <表名>

[add <新列名> <數據類型> [完整性約束]]

[drop <完整性約束名>]

[alter column <列名> <數據類型>];

例如,向Student表中添加“入學時間”:

alter table Student add S_entrance Date;

       將年齡的數據類型由字符型改為整型

alter table Student alter column Sage int;

       增加課程名必須取唯一值的約束條件

alter table Course add unique (Cname);


 

3、索引的建立與刪除

建立索引是為了加快查詢速度,可以根據需要,在基本表上建立一個或多個索引,以提供多種存取路徑,加快查找速度。

建立索引的語句定義如下:

create [unique][cluster] index <索引名> on <表名>(<列名>[<次序>][,<列名>[<次序>]]);

其中次序是指定索引值的排序次序,可以選擇ASC(升序)或DESC(降序),缺省值是ASC。

unique表明此索引的每一個索引值只對應唯一的數據記錄。

cluster表明要建立的索引是聚簇索引。聚簇索引是指索引項的順序與表中記錄的物理順序一致的索引組織。例如:

create cluster index Stuname on Student(Sname);

該語句將會在Student表中的Sname列上建立一個聚簇索引,用戶可以在最經常查詢的列上建立聚簇索引以提高查詢效率。在一個表上只能創建一個聚簇索引。如果對已經建立聚簇索引列上的數據進行更新操作時,常常導致表中記錄的物理順序發生改變,代價較大,所以對於經常更新的列不宜建立聚簇索引。

例如在SC表上創建一個索引,該索引是唯一的,且按學號升序和課程號降序,如下:

create unique index SCNO on SC(Sno ASC, Cno DESC);

索引的維護是由系統完成的,不用用戶干預。建立索引是為了減少查詢操作的時間,但如果數據增刪改的操作比較頻繁,系統則會話費很多時間來維護它,從而降低查詢效率,這時可以刪除一些不必要的索引,刪除語句如下:

drop index <索引名> on <表名>或 alter table  <表名> drop index <索引名>

具體索引的使用方法,可以參照該網站:http://www.jb51.net/Special/621.htm

在RDBMS中,索引一般采用B+樹、HASH索引來實現。B+樹具有動態平衡的優點。HASH具有查找快速的優點。至於索引的實現是采用B+樹還是HASH索引,則由具體的RDBMS來決定。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM