數據庫系統提供了數據定義語言DDL描述數據庫schema,數據操作語言DML來表示數據庫查詢和更新。
在實踐中,DDL和DML不是兩個單獨的語言,而是簡單地構成了一門數據庫語言的部分,比如SQL語言。
幾乎所有的關係數據庫都使用SQL語言。
1.4.1 數據定義語言
我們使用DDL來描述數據庫schema以及數據的其他性質。
我們使用一類特殊的DDL語言,即數據存儲和定義語言來描述存儲結構以及數據庫系統使用的訪問方法。這類特殊的DDL語言定義了數據庫schema的實現細節,通常是對用戶隱藏的。
在數據庫中存儲的數據值必須滿足某些一致性約束。比如,一個大學要求一個系的賬戶餘額必須永不爲負數。
DDL提供了工具來描述這些約束。
每當數據庫更新時,數據庫系統必須檢查這些約束。
雖然,一個約束可以是任何一個判斷,但是測試任意的判斷是有開銷的。
因此,數據庫實現的僅是那些具有最小測試開銷的約束,比如:
- 定義域約束
- 引用約束
- 權限約束
DDL語句的處理會有一些輸出。
DDL的輸出被放在數據字典裏。
1.4.2 SQL數據定義語言
SQL提供了豐富的DDL來支持定義表及數據類型和完整性約束。
create table department (dept_name char(20), building char(15), budget numric(12,2));
執行前面的DDL語句,會創建一張有3列(dept_name、building、budget)的department表,其中每列都關聯有具體的數據類型。
SQL DDL也支持若干類型的完整性約束。比如,主鍵約束,你可以設置dept_name的屬性值是一個主鍵,保證沒有兩個繫有相同的系名稱。再比如,外鍵約束,你可以描述在任何一個instructor記錄裏的dept_name屬性值必須出現在department表中的某個記錄的dept_name屬性裏。
1.4.3 數據操作語言
數據查詢語言DML是一門能使用戶訪問和操作根據數據模型組織的數據。
數據查詢語言支持的訪問類型有:
- 檢索存儲在數據庫中的信息
- 向數據庫中插入信息
- 從數據庫中刪除信息
- 修改存儲在數據庫中的信息
有兩種類型的數據操作語言:
- 過程式DML
要求用戶描述需要什麼樣的數據以及如何獲取那些數據; - 聲明式DML
要求用戶描述需要什麼樣的數據,但不用描述如何獲取那些數據
跟過程式DML相比,聲明式DML更容易學習和使用。
既然用戶不用描述如何獲取數據,則數據庫系統必須找出有效訪問數據的方式。數據庫系統中的查詢處理器組件負責將DML查詢轉換成物理層的操作序列。
不管是在商業上,還是實驗室裏,在使用的數據庫查詢語言有多個。我們研究的是使用最廣泛的SQL查詢語言。
在1.3節裏討論的數據抽象分層不僅可以用來定義或者結構化數據,而且可以用來操作數據。在物理層抽象,我們必須定義支持有效訪問數據的算法。在更高的抽象層中,我們更強調易用性,目標是支持人們跟數據庫系統有效地交互。
1.4.4 SQL數據查詢語言
SQL查詢語言不是過程式語言。
一次查詢的輸入是幾張表,有可能是一張。
一次查詢的返回通常是一張表。
示例1 輸入是一張表的查詢:找出歷史系的所有教員的姓名
select name from instructor where dept_name = 'History';
示例2 輸入是多張表的查詢:找出預算大於95000美元的系裏所有教員的ID
以及系名稱
select instructor.ID, department.dept_name from instructor, department where instructor.dept_name = department.dept_name and department.budget > 95000;
1.4.5 從應用程序中進行數據庫訪問
SQL VS 通用的圖靈機
諸如SQL等聲明式查詢語言沒有通用的圖靈機器功能強大,即有些計算使用SQL是無法實現的。
SQL也不支持一些操作,比如接受來自用戶的輸入、輸出結果到顯示器、網絡通信。
這些SQL無法實現的操作必須使用主機語言並嵌入SQL查詢來編寫,比如C++、Java、Python等,這是跟數據庫交互的程序的實現方式,比如在大學中用來支持學生註冊課程、生成班級名冊、計算GPA、生成支付賬單等的程序。
爲了訪問數據庫,DML語句需要從主機語言中發出,在數據庫中執行。最常見的是使用一個應用程序接口API來實現,該API能用來發送DML和DDL語句到數據庫和檢索結果。ODBC標準定義了C語言及其他語言跟數據庫交互使用的API。JDBC標準定義了Java語言跟數據庫交互使用的API。
總結:
DDL和DML跟數據模型之間的關係
SQL VS 編程語言
數據定義語言
描述數據庫的schema以及數據的額外性質(比如完整性約束等)
數據操作語言
使得用戶能訪問或者操作按照數據模型描述組織的數據。