數據庫語句(一)


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

1)綜合統一 

2)高度非過程化

3)面向集合的操作方式

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

5)語言簡潔,易學易用

 

我們先說說綜合統一

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

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

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

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

數據操作符統一

 

然后說說高度非過程化

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

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

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

 

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

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

v  SQL采用集合操作方式

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

 

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

SQL是獨立的語言

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

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  在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  定義基本表所屬模式

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

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

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

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

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

方法三:設置所屬的模式

 

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  誰可以建立索引

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

             PRIMARY  KEY

             UNIQUE

v  誰 維護索引

     DBMS自動完成 

v  使用索引

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

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

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

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

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

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

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;

 

建表注意事項:

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

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

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

 

修改索引

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

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

 

刪除索引

DROP INDEX <索引名>;

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

描述。

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

            DROP INDEX Stusname;

 


免責聲明!

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



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