1. 程式人生 > >數據庫語句(一)

數據庫語句(一)

set 通用 五個 和數 完成 面向過程 bms 補充 分析

很快,我們就進入到我們數據庫課程的核心章節,語句章節,首先我們先談談sql,其是結構化查詢語句,是關系數據庫的標準語言,同時,sql也是一個通用,功能極強的關系數據庫語言。其特點有五個,分別為

1)綜合統一

2)高度非過程化

3)面向集合的操作方式

4)以同一種語法結構提供多種使用方式

5)語言簡潔,易學易用

我們先說說綜合統一

n 集數據定義語言(DDL),數據操縱語言(DML),數據控制語言(DCL)功能於一體。

n 可以獨立完成數據庫生命周期中的全部活動:

  • 定義關系模式,插入數據,建立數據庫;
  • 對數據庫中的數據進行查詢和更新;
  • 數據庫重構和維護
  • 數據庫安全性、完整性控制等

n 用戶數據庫投入運行後,可根據需要隨時逐步修改模式,不影響數據的運行

n 數據操作符統一

然後說說高度非過程化

v 非關系數據模型的數據操縱語言“面向過程”,必須制定存取路徑

v SQL只要提出“做什麽”,無須了解存取路徑。

v 存取路徑的選擇以及SQL的操作過程系統自動完成

然後再說說面向集合的操作方式:

v 非關系數據模型采用面向記錄的操作方式,操作對象是一條記錄

v SQL采用集合操作方式

  • 操作對象、查找結果可以是元組的集合
  • 一次插入、刪除、更新操作的對象可以是元組的集合

然後再說說以同一種語法結構提供多種使用方式

v SQL是獨立的語言

能夠獨立地用於聯機交互的使用方式

v SQL又是嵌入式語言

SQL能夠嵌入到高級語言(例如C,C++,Java)程序中,供程序員設計程序時使用

最後說說語言簡潔,易學易用

技術分享圖片

Sql所涉及的基本概念,我們也要了解,分別為三級模式結構圖,基本表,存儲文件,視圖,首先先了解sql支持關系數據庫的三級模式結構圖:

技術分享圖片

然後看看基本表:

本身獨立存在的表

SQL中一個關系就對應一個基本表

一個(或多個)基本表對應一個存儲文件

一個表可以帶若幹索引

再看看存儲文件:

邏輯結構組成了關系數據庫的內模式

物理結構是任意的,對用戶透明

最後看看視圖:

從一個或幾個基本表導出的表

數據庫中只存放視圖的定義而不存放視圖對應的數據

視圖是一個虛表

用戶可以在視圖上再定義視圖

了解到這些基礎知識之後,然後我們就進入主題了,就是我們的語句,首先先說說我們sql的數據定義,sql的數據定義功能分:模式(數據庫)定義,表定義,視圖和索引的定義,具體的語句如下:

技術分享圖片

嘿嘿嘿,說了數據定義功能的四個分類,現在我們就先說模式的定義與刪除(sql serverlar版本):

定義

不說其他,我們直接上代碼,簡單直白,通俗易懂:

[例1]定義一個學生-課程模式S-T

  CREATE SCHEMA “S-T” AUTHORIZATION WANG;

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

  

 [例2]CREATE SCHEMA AUTHORIZATION WANG;

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

  

註意:如果沒有指定<模式名>,那麽<模式名>隱含為<用戶名>

分析我們的模式:

v 定義模式實際上定義了一個命名空間(數據庫中再建立一個數據庫)

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

v 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。其語句塊通式如下:

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

例子:

CREATE SCHEMA TEST AUTHORIZATION ZHANG

    CREATE TABLE TAB1(                       COL1 SMALLINT,

                                            COL2 INT,

                                            COL3 CHAR(20),

                                            COL4 NUMERIC(10,3),

                                            COL5 DECIMAL(5,2)

                                          );

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

  

刪除

刪除很簡單,只需要把握一條語句語法,以及語句的兩大關鍵詞(級聯和限制),不說其他,直接總結如下:

DROP SCHEMA <模式名> <CASCADE|RESTRICT>

CASCADE(級聯)

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

RESTRICT(限制)

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

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

然後我們就說數據定義的第二大模塊,基本表的定義,刪除與修改

定義:

一、定義基本表

CREATE TABLE <表名>

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

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

[,<表級完整性約束條件> ] );

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

嘿嘿嘿,看到沒,這邊有個數據類型和約束條件,那麽數據類型又有什麽,約束條件又有什麽呢?那麽就得繼續往下看,首先看看數據類型吧

技術分享圖片

而約束條件有點多,而sql的約束有以下類型:

技術分享圖片

然後我說說表的一些補充,就是表和模式的關系:

v 每一個基本表都屬於某一個模式(一個數據庫一般有多個模式)

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

v 定義基本表所屬模式

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

Create table “S-T”.Student(......); /*模式名為 S-T*/

Create table “S-T”.Course(......);

Create table “S-T”.SC(......);

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

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

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

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

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

v 顯示當前的搜索路徑: SHOW search_path;

v 搜索路徑的當前默認值是:$user, PUBLIC

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

SET search_path TO “S-T”,PUBLIC;

Create table Student(......);

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

RDBMS發現搜索路徑中第一個模式名S-T存在,就把該

模式作為基本表Student所屬的模式。

修改

其語法如下所示:

ALTER TABLE <表名>

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

[ADD <標記完整性約束>]

[DROP <列名>]

[ DROP <完整性約束名> ]

[ ALTER COLUMN<列名> <數據類型> ];

其中ADD子句用於增加新列,新的列級完整性約束條件和新的表級完整性約束條件。

DROP COLUMN子句用於刪除表中的列,如果指定了CASCADE短語,則自動刪除引用了該列的其他對象,比如視圖;如果是RESTRICT短語,則如果該列被其他對象引用,RDBMS將拒絕刪除該列。

DROP CONSTRAINT子句用於刪除指定的完整性約束條件。

ALTER COLUMN子句用於修改原有的列定義,包括修改列名( alter table test change column address address1 varchar(30)--修改表列名)和數據類型

刪除

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

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

  • ? 欲刪除的基本表不能被其他表的約束所引用
  • ? 如果存在依賴該表的對象,則此表不能被刪除

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

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

然後我們要說說數據定義的第三個模塊,索引的建立與刪除,在說索引的建立與刪除之前,我們需要知道一些基礎知識,具體如下:

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

v 誰可以建立索引

  • DBA 或 表的屬主(即建立表的人)
  • DBMS一般會自動建立以下列上的索引

PRIMARY KEY

UNIQUE

v 誰 維護索引

DBMS自動完成

v 使用索引

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

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

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

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

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

v 索引是關系數據庫的內部實現技術,屬於內模式的範疇

v CREATE INDEX語句定義索引時,可以定義索引是唯一索引、非唯一索引或聚簇索引

嘿嘿嘿,好了,了解完一些基礎之後,我們就進入到建立和刪除的知識點了

建立

v 語句格式

CREATE [UNIQUE] [CLUSTER] INDEX <索引名>

ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);

[例13] CREATE CLUSTER INDEX Stusname ON Student(Sname)

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

Sc表按學號升序和課程號降序建唯一索引:

Create unique index scno on scsno asccno desc;

建表註意事項:

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

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

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

修改索引

對於已經建立的索引,如果需要對其重新命名,可是使用ALTER INDEX語句。其一般格式是:

ALTER INDEX <舊索引名> RENAME TO <新索引名>;

刪除索引

DROP INDEX <索引名>;

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

描述。

[例15] 刪除Student表的Stusname索引

DROP INDEX Stusname;

數據庫語句(一)