1 SQL 的哲學形如 Linux 哲學一切都是文件,在 SQL 領域也有這樣一條至理名言
2 關系數(shù)據庫所謂關系數(shù)據庫(Relational database)是創(chuàng)建在關系模型基礎上的數(shù)據庫,借助于集合代數(shù)等數(shù)學概念和方法來處理數(shù)據庫中的數(shù)據。 現(xiàn)實世界中的各種實體以及實體之間的各種聯(lián)系均用關系模型表示。現(xiàn)如今雖然對此模型有一些批評意見,但它還是數(shù)據存儲的傳統(tǒng)標準。標準數(shù)據查詢語言SQL就是一種基于關系數(shù)據庫的語言,這種語言執(zhí)行對關系數(shù)據庫中數(shù)據的檢索和操作。 關系模型由關系數(shù)據結構、關系操作集合、關系完整性約束三部分組成。 2.1 數(shù)據結構
2.2 操作集合關系模塊中常用的操作包括:
其中,使用最多、也最復雜的操作就是數(shù)據查詢,具體來說包括
2.3 完整性約束完整性約束包括 2.3.1 實體完整性(Entity integrity)實體完整性(是關系模型中數(shù)據庫完整性三項規(guī)則的其中之一。實體完整性這項規(guī)則要求每個數(shù)據表都必須有主鍵,而作為主鍵的所有欄位,其屬性必須是獨一及非空值。 在關系數(shù)據庫中,唯一標識每一行數(shù)據的字段稱為主鍵(Primary Key),主鍵字段不能為空。每個表有且只能有一個主鍵。 2.3.2 參照完整性又稱引用完整性,是數(shù)據的屬性,用以表明引用的有效。參照的完整性不允許關系中有不存在的實體引用。參照完整性與實體完整性二者,皆是關系模型必須滿足的完整性約束條件,其目的在于保證數(shù)據的一致性。 外鍵的參照完整性。
2.3.3 用戶定義完整性基于業(yè)務需要自定義的約束。
MySQL 中只有 InnoDB 存儲引擎支持外鍵約束;MySQL 8.0.16 增加了對檢查約束的支持。因此我們強大的 MySQL 支持以上所有約束。
3 SQL:面向集合編程3.1 語法特性SQL 是一種聲明性的編程語言,語法接近于自然語言(英語)。通過幾個簡單的英文單詞,例如 SELECT、INSERT、UPDATE、CREATE、DROP 等,完成大部分的數(shù)據庫操作。
SQL 語句不區(qū)分大小寫,但是遵循一定的規(guī)則可以讓代碼更容易閱讀。 SQL 是一種聲明式的語言,聲明式語言的主要思想是告訴計算機想要什么結果(what),但不指定具體怎么做。這類語言還包括 HTML、正則表達式以及函數(shù)式編程等。 3.2 面向集合對于 SQL 語句而言,它所操作的對象是一個集合(表),操作的結果也是一個集合(表)。例如以下查詢:
其中 employee 是一個表,它是該語句查詢的對象;同時,查詢的結果也是一個表。所以,我們可以繼續(xù)擴展該查詢:
我們將括號中的查詢結果(取名為 dt)作為輸入值,傳遞給了外面的查詢;最終整個語句的結果仍然是一個表。 SQL 中的查詢可以完成各種數(shù)據操作,例如過濾轉換、分組匯總、排序顯示等;但是它們本質上都是針對表的操作,結果也是表。 不僅僅是查詢語句,SQL 中的插入、更新和刪除都以集合為操作對象。我們再看一個插入數(shù)據的示例:
我們首先使用 CREATE TABLE 語句創(chuàng)建了一個表,然后使用 INSERT INTO 語句插入數(shù)據。在執(zhí)行插入操作之前,會在內存中創(chuàng)建一個包含 3 條數(shù)據的臨時集合(表),然后將該集合插入目標表中。由于我們通常一次插入一條數(shù)據,以為是按照數(shù)據行進行插入;實際上,一條數(shù)據也是一個集合,只不過它只有一個元素而已。 UNION ALL 是 SQL 中的并集運算,用于將兩個集合組成一個更大的集合。此外,SQL 還支持交集運算(INTERSECT)、差集運算(EXCEPT)以及笛卡兒積(Cartesian product) 4 數(shù)據庫案例包含 3 個表:員工表(employee)、部門表(department)和職位表(job)。
5 總結關系模型中定義了一個簡單的數(shù)據結構,即關系(表),用于存儲數(shù)據。SQL 是關系數(shù)據庫的通用標準語言,通過聲明的方式執(zhí)行數(shù)據定義、數(shù)據操作、訪問控制等。 參考
|
|
|