1 SQL 的哲學
形如 Linux 哲學一切都是檔案,在 SQL 領域也有這樣一條至理名言
一切都是關系
2 關系資料庫
所謂關系資料庫(Relational database)是建立在關系模型基礎上的資料庫,借助于集合代數等數學概念和方法來處理資料庫中的資料。
現實世界中的各種實體以及實體之間的各種聯系均用關系模型表示。現如今雖然對此模型有一些批評意見,但它還是資料存儲的傳統标準。标準資料查詢語言SQL就是一種基于關系資料庫的語言,這種語言執行對關系資料庫中資料的檢索和操作。
關系模型由關系資料結構、關系操作集合、關系完整性限制三部分組成。
2.1 資料結構
表(關系Relation)
以列(值組Tuple)和行(屬性Attribute)的形式組織起來的資料的集合。一個資料庫包括一個或多個表(關系Relation)。例如,可能有一個有關作者資訊的名為authors的表(關系Relation)。每行(屬性Attribute)都包含特定類型的資訊,如作者的姓氏。每列(值組Tuple)都包含有關特定作者的所有資訊:姓、名、住址等等。在關系型資料庫當中一個表(關系Relation)就是一個關系,一個關系資料庫可以包含多個表(關系Relation)
行
也稱為記錄(Record),代表了關系中的單個實體。
列
也稱為字段(Field),表示實體的某個屬性。表中的每個列都有一個對應的資料類型,常見的資料類型包括字元類型、數字類型、日期時間類型等。
2.2 操作集合
關系子產品中常用的操作包括:
- 增加(Create)
- 查詢(Retrieve)
- 更新(Update)
- 删除(Delete)
其中,使用最多、也最複雜的操作就是資料查詢,具體來說包括
- 選擇(Selection)
- 投影(Projection)
- 并集(Union)
- 交集(Intersection)
- 差集(exception)
- 笛卡兒積(Cartesian product)
- ...
2.3 完整性限制
完整性限制包括
2.3.1 實體完整性(Entity integrity)
實體完整性(是關系模型中資料庫完整性三項規則的其中之一。實體完整性這項規則要求每個資料表都必須有主鍵,而作為主鍵的所有欄位,其屬性必須是獨一及非空值。
在關系資料庫中,唯一辨別每一行資料的字段稱為主鍵(Primary Key),主鍵字段不能為空。每個表有且隻能有一個主鍵。
2.3.2 參照完整性
又稱引用完整性,是資料的屬性,用以表明引用的有效。參照的完整性不允許關系中有不存在的實體引用。參照完整性與實體完整性二者,皆是關系模型必須滿足的完整性限制條件,其目的在于保證資料的一緻性。
外鍵的參照完整性。
-
外鍵(Foreign Key)代表了兩個表之間的關聯關系
比如員工屬于某個部門;是以員工表中存在部門編号字段,引用了部門表中的部門編号字段。對于外鍵引用,被引用的資料必須存在,員工不可能屬于一個不存在的部門;删除某個部門之前,也需要對部門中的員工進行相應的處理。
2.3.3 使用者定義完整性
基于業務需要自定義的限制。
非空限制(NOT NULL)
確定了相應的字段不會出現空值,例如員工一定要有姓名
唯一限制(UNIQUE)
用于確定字段中的值不會重複,每個員工的電子郵箱必須唯一
檢查限制(CHECK)
可以定義更多的業務規則,例如,薪水必須大于 0 ,字元必須大寫等
預設值(DEFAULT)
用于向字段中插入預設的資料。
MySQL 中隻有 InnoDB 存儲引擎支援外鍵限制;MySQL 8.0.16 增加了對檢查限制的支援。是以我們強大的 MySQL 支援以上所有限制。
從 MySQL 5.5 開始預設使用 InnoDB 存儲引擎,支援事務處理(ACID)、行級鎖定、故障恢複、多版本并發控制(MVCC)以及外鍵限制等