1. 程式人生 > >《數據庫系統概論》 -- 3.1SQL概論和DDL

《數據庫系統概論》 -- 3.1SQL概論和DDL

pat 內部 rdbms primary 如果 針對 存儲過程 直接 dep

3.1 SQL特點

綜合統一

集數據定義語言、數據操縱語言、數據控制語言的功能於一體,語言風格統一,可以獨立完成數據庫生命周期中的全部活動

關系模型中實體和實體間的聯系均用關系表示,數據結構的單一性帶來了數據操作符的統一性

高度非過程化

存取路徑的選擇以及SQL的操作過程由系統自動完成,提高了數據獨立性

面向集合的操作方式

relation-at-a-time

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

獨立的語言:可以直接命令行鍵入SQL命令操作

嵌入式語言:也可以嵌入到高級語言(C、C++、JAVA)程序中

語言簡潔,易學易用

核心功能只用9個動詞

        SQL功能 動詞

        數據查詢 SELECT

        數據定義 CREATE, DROP, ALTER

        數據操縱 INSERT, UPDATE, DELETE

        數據控制 GRANT, REVOKE

3.2 SQL基本概念

基本表:本身獨立存在的表,一個關系對應一個基本表,一個或多個基本表對應一個存儲文件

索引:一個表可以帶若幹索引,索引也存放在存儲文件中

視圖:從一個或幾個基本表到處的表,數據庫中存放視圖的定義而不存放視圖對應的數據

3.3 數據定義

  操作對象            操作方式

創建 刪除 修改

  模式 CREATE SCHEMA DROP SCHEMA

  表 CREATE TABLE DROP TABLE ALTER TABLE

  視圖 CREATE VIEW DROP VIEW

  索引 CREATE INDEX DROP INDEX ALTER INDEX

  模式創建

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

    說明 創建模式實際上定義了一個命名空間,在這個空間中可以進一步定義該模式包含的數據庫對象;

        <模式名>省略時缺省與<用戶名>保持一致;

        可以在創建模式同時創建表、視圖,或授權

    舉例 為用戶WANG定義一個學生-課程模式S-T

          CREATE SCHEMA S-T AUTHORIZATION WANG;

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

          CREATE SCHEMA TEST AUTHORIZATION ZHANG

            CREATE TABLE TAB1(COL1 SMALLLINT,

                   COL2 INT,

                   COL3 CHAR(20),

                   COL4 NUMERIC(10,3),

                   COL5 DECIMAL(5,2)

                   );

    註:附錄--01.schema和database的區別

  模式刪除

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

    說明 CASCADE:級聯,在刪除模式時,刪除該模式中的所有數據庫對象

        RESTRICT:限制,在刪除模式時,如果模式中已經定義了數據庫對象,則拒絕該刪除語句的執行

    舉例 級聯刪除TEST模式

          DROP SCHEMA TEST CASCADE;

  基本表創建

    格式 CREATE TABLE <表名> (<列名> <數據類型> [列級完整性約束條件]

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

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

    說明 如果完整性約束條件涉及該表的多個屬性列,則必須定義在表級上;

        否則即可以定義在列級,也可以定義在表級

        主碼有多個屬性構成,必須寫到表級完整性約束處

    舉例 CREATE TABLE Student (

                    Sno CHAR(9) PRIMARY KEY,

                    Sname CHAR(20) UNIQUE,

                    Ssex CHAR(2),

                    Sage SMALLINT,

                    Sdept CHAR(20)

                    );

      被參照表和參照表可以是同一個表

          CREATE TABLE Course (

                    Cno CHAR(4) PRIMARY KEY,

                    Cname CHAR(40) NOT NULL,

                    Cpno CHAR(4),

                    Ccredit SMALLINT,

                    FOREIGN KEY (Cpno) REFERENCES Course(Cno)

                    );

    註:附錄--02.數據類型、03.模式與表

  修改基本表

    格式 ALTER TABLE <表名>

            [RENAME <新表名>]

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

            [ADD <新表級完整性約束>]

            [DROP [COLUMN] <列名> [CASCADE|RESTRICT]]

            [DROP CONSTRAINT <完整性約束名> [RESTRICT|CASCADE]]

            [ALTER COLUMN <列名> [(<新列名> <新數據類型>) | <新數據類型>]];

    說明 RENAME--修改表名

        ADD--增加新列、新的列級完整性約束條件、新的表級完整性約束條件

        DROP--刪除表中的列、指定的完整性約束條件

        ALTER COLUMN--修改原有的列定義(列名、數據類型)

    舉例 向Student表增加“入學時間”列,數據類型為日期型

          ALTER TABLE Student ADD Sentrance DATE;

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

          ALTER TABLE Student ALTER COLUMN Sage INT;

       增加Course表中課程名稱必須唯一的約束條件

          ALTER TABLE Course ADD UNIQUE(Cname);

  刪除基本表

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

    說明 如果選擇為RESTRICT,則表不能被其他表的約束引用(如CHECK、FOREIGN KEY),不能索引,不能有視圖,不能有觸發器(trigger),不能有存儲過程或函數;

        不同RDBMS對於RESTRICT和CASCADE的處理不同,需參考用戶手冊

  建立索引

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

    說明 UNIQUE--此索引的每一個索引值只對應唯一的數據記錄

        CLUSTER--要建立的索引時聚簇索引???

        索引可以建在該表的一列或多列上,每個列名後面可以用<次序>指定所引致的排列次序,ASC-升序(默認),DESC-降序

    舉例 為Student表按照學號升序建立唯一索引

          CREATE UNIQUE INDEX Stusno ON Student(Sno);

       為Course表按照課程號升序建立唯一索引

          CREATE UNIQUE INDEX Coucno ON Course(Cno);

       為SC表按照學號升序,課程號降序建立唯一索引

          CREATE UNIQUE SCno ON SC(Sno, Cno DESC);

    註:附錄--04.索引理解、05.數據字典

  修改索引

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

  刪除索引

    格式 DROP INDEX <索引名>;

    說明 刪除索引時,會同時從數據字典中刪去有關該索引的描述

附:

  01.schema和database的區別

    schema是一個名字空間,創建在某個database下的;一個database下可以包含多個schema。
    schema的好處有三點:
      1.多個用戶使用同一個數據庫而不會相互影響。
      2.對數據庫中的對象進行邏輯分組,更便於管理。
      3.各個應用分別使用各自的模式,以避免命名沖突。

    各個數據庫產品的database和schema定義不盡相同,需具體情況具體分析

  02.數據類型(不同關系數據庫管理系統的數據類型不盡相同)

    數據類型 含義

    CHAR(n)/         同CHARACTER(n)

    CHARACTER(n) 長度為n的定長字符串

    VARCHAR(n)/       同CHARACTERVARYING(n)

    CHARACTERVARYING(n) 最大長度為n的變長字符串

    CLOB 字符串大對象

    BLOB 二進制大對象

    INT/           同INTEGER

    INTEGER 長整數(4字節)

    SMALLINT 短整數(2字節)

    BIGINT 大整數(8字節)

    NUMERIC(p,d) 定點數,小數點前有p位(不包括小數點、符號),小數點後有d位

    DECIMAL(p,d)/      同DEC(p,d)

    DEC(p,d) 同NUMERIC

    REAL 取決於機器精度的單精度浮點數

    DOUBLE PERCISION 取決於機器精度的雙精度浮點數

    FLOAT(n) 可選精度的浮點數,精度至少為n位數字

    BOOLEAN 邏輯布爾值

    DATE 日期,包含年、月、日,格式為YYYY-MM-DD

    TIME 時間,包含時、分、秒,格式為HH:MM:SS

    TIMESTAMP 時間戳類型

    INTERVAL 時間間隔類型

  03.模式與表

   每一個基本表都屬於某一個模式,當定義基本表時有三個方法定義它所屬的模式

   CREATE TABLE "S-T".Student(...);

   創建模式同時創建表

   設置所屬的模式

   1.創建數據庫對象時沒有指定所屬模式,會根據搜索路徑來確定該對象所屬的模式;

   2.搜索路徑包含一組模式列表,第一個存在的模式會被用來作為數據庫對象所屬模式;

   3.通過show search_path;查看當前搜索路徑;

   4.DBA可通過SET search_path TO "S-T", PUBLIC;設置當前搜索路徑

  04.索引理解

   用戶可以根據應用環境的需要在基本表上建立一個或多個索引,以提供多種存儲路徑,加快查找速度

   索引分類

   順序文件上的索引:

   針對按指定屬性值升序或降序存儲的關系,在該屬性上建立一個順序索引文件

   索引文件由屬性值和相應的元組指針組成。

   B+樹索引:

   將索引屬性組織成B+樹的形式,

   B+樹的葉節點為屬性值和相應的元組指針。

   優點:動態平衡

   散列索引:

   建立若幹個桶,將索引屬性按照其散列函數值映射到相應桶中

   桶中存放索引屬性值和相應的元組指針

   優點:查找速度快

   位圖索引:

   用位向量記錄索引屬性中可能出現的值,每個位向量對應一個可能值

   不同RDBMS支持的索引類型不同。

   索引應該由DBA或表的owner來創建和維護。

   用戶不能顯示選擇索引。索引是RDBMS的內部實現技術,屬於內模式

  05.數據字典

   數據字典是RDBMS內部的一組系統表

   記錄了數據庫中所有定義信息,包括關系模式定義、視圖定義、索引定義、完整性約束定義、各類用戶對數據庫的操作權限、一些統計信息等

   執行DDL,實際就是更新數據字典表中的對應信息

   根據數據字典中的信息進行查詢優化和查詢處理

《數據庫系統概論》 -- 3.1SQL概論和DDL