資料庫 - 關聯式資料庫標準語言SQL

Simon.Wang發表於2015-05-05

SQL(Structured Query Language)

結構化查詢語言,是關聯式資料庫的標準語言

SQL是一個通用的、功能極強的關聯式資料庫語言

SQL特點

1.綜合統一
集資料定義語言(DDL),資料操縱語言(DML),資料控制語言(DCL)功能於一體。
可以獨立完成資料庫生命週期中的全部活動:
定義關係模式,插入資料,建立資料庫;
對資料庫中的資料進行查詢和更新;
資料庫重構和維護
資料庫安全性、完整性控制等
使用者資料庫投入執行後,可根據需要隨時逐步修改模式,不影響資料的執行。
資料操作符統一

非關係資料模型的資料操縱語言“程式導向”,必須制定存取路徑
SQL只要提出“做什麼”,無須瞭解存取路徑。
存取路徑的選擇以及SQL的操作過程由系統自動完成。
非關係資料模型採用面向記錄的操作方式,操作物件是一條記錄
SQL採用集合操作方式

 操作物件、查詢結果可以是元組的集合
 一次插入、刪除、更新操作的物件可以是元組的集合

SQL是獨立的語言
能夠獨立地用於聯機互動的使用方式
SQL又是嵌入式語言
SQL能夠嵌入到高階語言(例如C,C++,Java)程式中,供程式設計師設計程式時使用

SQL的基本概念

基本表
本身獨立存在的表
SQL中一個關係就對應一個基本表
一個(或多個)基本表對應一個儲存檔案
一個表可以帶若干索引
儲存檔案
邏輯結構組成了關聯式資料庫的內模式
物理結構是任意的,對使用者透明
檢視
從一個或幾個基本表匯出的表
資料庫中只存放檢視的定義而不存放檢視對應的資料
檢視是一個虛表
使用者可以在檢視上再定義檢視

學生-課程 資料庫設計

學生-課程模式 S-T :    
    學生表:Student(Sno,Sname,Ssex,Sage,Sdept)
    課程表:Course(Cno,Cname,Cpno,Ccredit)
    學生選課表:SC(Sno,Cno,Grade)
學號 姓名 性別 年齡 所在系
200215121 張三 21 CS
200215122 李四 22 MA
200215123 王五 25 IA

定義模式

 [例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]
CREATE SCHEMA TEST AUTHORIZATION ZHANG 
    CREATE TABLE TAB1(COL1 SMALLINT, 
                                            COL2 INT,
                                            COL3 CHAR(20),
                                            COL4 NUMERIC(103),
                                            COL5 DECIMAL(52)
                                          );
    為使用者ZHANG建立了一個模式TEST,並在其中定義了一個表TAB1。

刪除模式

DROP SCHEMA (模式名) (CASCADE|RESTRICT)
CASCADE(級聯)
刪除模式的同時把該模式中所有的資料庫物件全部刪除
RESTRICT(限制)
如果該模式中定義了下屬的資料庫物件(如表、檢視等),則拒絕該刪除語句的執行。
當該模式中沒有任何下屬的物件時 才能執行。

[例4]  DROP SCHEMA ZHANG CASCADE;
         刪除模式ZHANG
         同時該模式中定義的表TAB1也被刪除

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

一、定義基本表

CREATE TABLE <表名><列名> <資料型別>[ <列級完整性約束條件> ]
      [,<列名> <資料型別>[ <列級完整性約束條件>] ] …
      [,<表級完整性約束條件> ] );

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

[例5]  建立“學生”表Student,學號是主碼,姓名取值唯一。

    CREATE TABLE Student          
          (Sno   CHAR(9) PRIMARY KEY, /* 列級完整性約束條件*/                  
            Sname  CHAR(20) UNIQUE,     /* Sname取唯一值*/
            Ssex    CHAR(2),
            Sage   SMALLINT,
            Sdept  CHAR(20)
           ); 
 [例6] 建立一個“課程”表Course
      CREATE TABLE  Course
               ( Cno       CHAR(4) PRIMARY KEY,
                 Cname  CHAR(40),            
                 Cpno     CHAR(4) ,                                       
                 Ccredit  SMALLINTFOREIGN KEY (Cpno) REFERENCES  Course(Cno) 
            ); 
[例7]  建立一個“學生選課”表SC
    CREATE TABLE  SC
        (Sno  CHAR(9), 
        Cno  CHAR(4),  
        Grade    SMALLINTPRIMARY KEY (Sno,Cno),  
                     /* 主碼由兩個屬性構成,必須作為表級完整性進行定義*/
        FOREIGN KEY (Sno) REFERENCES Student(Sno),
                    /* 表級完整性約束條件,Sno是外碼,被參照表是Student */
        FOREIGN KEY (Cno) REFERENCES Course(Cno)
                   /* 表級完整性約束條件, Cno是外碼,被參照表是Course*/
        ); 

資料型別

SQL中域的概念用資料型別來實現
定義表的屬性時 需要指明其資料型別及長度
選用哪種資料型別
取值範圍
要做哪些運算

模式與表

每一個基本表都屬於某一個模式
一個模式包含多個基本表
定義基本表所屬模式
方法一:在表名中明顯地給出模式名
Create table “S-T”.Student(……); /模式名為 S-T/
Create table “S-T”.Cource(……);
Create table “S-T”.SC(……);
方法二:在建立模式語句中同時建立表
方法三:設定所屬的模式
建立基本表(其他資料庫物件也一樣)時,若沒有指定模式,系統根據搜尋路徑來確定該物件所屬的模式
RDBMS會使用模式列表中第一個存在的模式作為資料庫物件的模式名
若搜尋路徑中的模式名都不存在,系統將給出錯誤
顯示當前的搜尋路徑: SHOW search_path;
搜尋路徑的當前預設值是:$user, PUBLIC

相關文章