SQL的特色:是一個綜合的、功能極強而且簡潔容易學的語言。程序員
SQL的功能:數據查詢、數據操縱、數據定義、數據控制。數據庫
數據庫系統的主要功能是經過數據庫支持的數據語言來實現。數據結構
菲關係模型(層次模型、網狀模型)的數據語言分爲:框架
- DDL:數據定義語言(用來維護存儲數據的結構,例如:數據庫、表等)。
- DML:數據操縱語言(對數據進行操做,也就是對數據表的內容進行操做)。
- DSDL:數據存儲有關的描述語言。
SQL的特色:優化
- 綜合統一:集數據定義語言、數據操縱語言、數據控制語言的功能與一體,語言風格統一,能夠獨立完成數據庫生命週期中的所有活動;在關係模型中實體與實體之間的聯繫均用關係表示,這種數據結構的單一性帶來了數據操做符的統一性。
- 高度非過程化:只要提出「作什麼」,不用指明「怎麼作」,所以無須瞭解存取路徑,存取路徑的選擇以及SQL的操做過程由系統自動完成。
- 面向集合的操做方式:非關係數據模型採用的是面向記錄的操做方式,操做對象是一條記錄,但SQL採用集合操做方式,不只操做對象、查找結果可使元組的集合,並且一次插入、刪除、更新操做的對象也能夠是元組的集合。
- 以同一種語法結構提供多種使用方式:SQL既是獨立的語言,又是嵌入式語言。做爲獨立語言,它可以獨立的用於聯機交互的使用方式,用戶能夠在終端鍵盤上直接敲入SQL命令對數據庫進行操做;做爲嵌入式語言,SQL語句能夠嵌入到高級語言(C,C++,Java)程序中,供程序員設計程序時使用。
- 語言簡潔、易學易用:SQL功能極強,語言十分簡潔。核心功能只用了9個動詞(數據查詢:SELECT;數據定義:CREATE、DROP、ALTER;數據操縱:INSERT、UPDATE、DELETE;數據控制:GRANT、REVOKE)
補充:spa
- 基本表和視圖同樣,都是關係。
- 基本表是自己獨立存在的表,在關係數據庫管理系統中一個關係對應一個基本表。
- 一個或多個基本表對應一個存儲文件,一個表能夠帶若干索引,這些索引存放在存儲文件中
- 存儲文件的邏輯結構組成了關係數據庫的內模式,存儲文件的物理結構對最終用戶是隱蔽的。
- 視圖是從一個或多個基本表導出來的,它自己不獨立存儲的數據庫中,因此視圖是一個虛表。
數據定義:設計
關係數據庫系統支持三級模式結構,其模式、外模式、內模式中的基本對象是模式、表、索引。所以SQL的數據定義包括模式定義、表定義、視圖和索引的定義。對象
SQL標準不提供修改模式定義和修改視圖定義的操做。若是想修改這些對象,只能先將它們刪除然年再重建,SQL標準也沒用提供索引相關的語句。blog
一個數據庫管理系統的實例中能夠建多個數據庫,一個數據庫中能夠創建多個模式,一個模式下一般包括多個表、視圖和索引等數據。索引
- 定義模式:
CREATE SCHEMA <模式名> AUTHORIZATION <用戶名>;
若是沒有指定<模式名>,那麼<模式名>隱含爲<用戶名>。要建立模式,調用該命令的用戶必須擁有數據庫管理員權限,或者得到了數據庫管理員授予的CREATE SCHEMA的權限。
定義模式實際上定義了一個命名空間,在這個空間中能夠進一步定義該模式包含的數據庫對象,例如基本表、視圖、索引等。
- 刪除模式:
DROP SCHEMA <模式名> <CASCADE|RESTRICT>;
其中CASCADE和RESTRICT必須二選一,選擇了CASCADE(級聯),表示在刪除模式的同時把該模式中全部的數據庫對象所有刪除;選擇了RESTRICT(限制),表示若是該模式中已經定義了下屬的數據庫對象,則拒絕刪除語句的執行,只有當該模式中沒有任何下屬的對象時才能執行。
- 定義基本表
建立了一個模式就創建了一個數據庫的命名空間,一個框架。
CREATE TABLE <表名> (<列名> <數據類型> [列級完整性約束條件]
,<列名> <數據類型> [列級完整性約束條件]
……
,[<表級完整性約束條件>]);
建表的同時能夠定義與該表有關的完整性約束條件,這些完整性約束條件被存入系統的數據字典中,若是完整性約束條件涉及表中的多個屬性列,則必須定義在表級上,不然能夠定義在列級也能夠定義在表級。有主碼時要在主碼那一列定義完後面加上「PRIMARY KEY」,標識爲主碼。若是有外碼和被參照表以及被參照列,在完整性約束條件定義完後加上相應標識,外碼「FOREIGN KEY」,被參照表「REFERENCES」,被參照列加上「()」就行。參照表和被參照表能夠是同一個表。
數據類型:
- 修改基本表
ALTER TABLE<表名>
[ADD [COLUMN] <新列名> <數據類型> [完整性約束]]
[ADD <表級完整性約束>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
[DROP CONSTRAINT<完整性約束> [CASCADE|RESTRICT]]
[ALTRE COLUMN <列名> <數據類型>];
其中<表名>是要修改的基本表,ADD字句用於增長新的列、新的列級完整性約束條件和新的表級完整性約束條件。DROP COLUMN字句用於刪除表中的列。DROP CONSTRAINT字句用於刪除指定的完整性約束條件。ALTER COLUMN 字句用於修改原有的列定義,包括修改列名和數據類型。
- 刪除基本表
DROP TABLE <表名> [CASCADE|RESTRICT];
索引:
創建索引是加快查詢素的有效手段。
數據庫索引有多種類型,常見索引包括順序文件上的索引、B+樹索引、散列索引、位圖索引等,索引雖然能加快數據庫查詢速度,但須要佔用必定的存儲空間,當基本表跟新時,索引要進行相應的維護,這些都會增長數據庫的負擔。
通常來講,創建與刪除索引由數據庫管理員或表的屬主,即創建表的人,負責完成。關係數據庫管理系統在執行查詢時會自動選擇合適的索引做爲存取路徑,用戶沒必要也不能顯示地選擇索引。索引是關係數據庫管理系統的內部實現技術,屬於內模式的範疇。
- 創建索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>;
ON <表名>(<列名> [<次序>][,<列名>[<次序>]]……);
其中,<表名>是要創建索引的基本表的名字。索引能夠創建在該表的一列或多列上,各列名之間用逗號隔開。每一個<列名>後面還能夠用<次序>指定索引值的排列次序,可選ASC(升序)或DESC(降序),默認值爲ASC。
UNIQUE代表此索引的每個索引值只對應惟一的數據記錄。CLUSTER表示要創建的索引是聚簇索引。
- 修改索引
ALTER INDEX <舊索引名> RENAME TO <新索引名>;
- 刪除索引
索引一經創建就由系統使用和維護,不需用戶干預。創建索引是爲了減小查詢操做的時間,但若是數據增、刪、改頻繁,系統會花費許多時間來維護,從而下降了查詢效率。這時能夠刪除一些沒必要要的索引。
DROP INDEX <索引名>;
刪除索引時,系統會同時從數據字典中刪去有關該索引的描述。
數據字典
數據字典是關係數據庫管理系統內部的一組系統表,它記錄了數據庫中全部的定義信息,包括關係模式定義、視圖定義、索引定義、完整性約束定義、各種用戶對數據庫的操做權限、統計信息等。關係數據庫管理系統在執行SQL的數據定義語句時,實際上就是在更新數據字典表中的響應信息。在進行查詢優化和查詢處理時,數據字典中的纖細是其重要依據。