形如 Linux 哲學一切都是文件,在 SQL 領域也有這樣一條至理名言正則表達式
一切都是關係
sql
所謂關係數據庫(Relational database)是建立在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。數據庫
現實世界中的各類實體以及實體之間的各類聯繫均用關係模型表示。現現在雖然對此模型有一些批評意見,但它仍是數據存儲的傳統標準。標準數據查詢語言SQL就是一種基於關係數據庫的語言,這種語言執行對關係數據庫中數據的檢索和操做。編程
關係模型由關係數據結構、關係操做集合、關係完整性約束三部分組成。數據結構
列
也稱爲字段(Field),表示實體的某個屬性。表中的每一個列都有一個對應的數據類型,常見的數據類型包括字符類型、數字類型、日期時間類型等。併發
刪除(Delete)編程語言
其中,使用最多、也最複雜的操做就是數據查詢,具體來講包括函數式編程
完整性約束包括函數
實體完整性(是關係模型中數據庫完整性三項規則的其中之一。實體完整性這項規則要求每一個數據表都必須有主鍵,而做爲主鍵的全部欄位,其屬性必須是獨一及非空值。code
在關係數據庫中,惟一標識每一行數據的字段稱爲主鍵(Primary Key),主鍵字段不能爲空。每一個表有且只能有一個主鍵。
又稱引用完整性,是數據的屬性,用以代表引用的有效。參照的完整性不容許關係中有不存在的實體引用。參照完整性與實體完整性兩者,皆是關係模型必須知足的完整性約束條件,其目的在於保證數據的一致性。
外鍵的參照完整性。
基於業務須要自定義的約束。
非空約束(NOT NULL)
確保了相應的字段不會出現空值,例如員工必定要有姓名
惟一約束(UNIQUE)
用於確保字段中的值不會重複,每一個員工的電子郵箱必須惟一
默認值(DEFAULT)
用於向字段中插入默認的數據。
MySQL 中只有 InnoDB 存儲引擎支持外鍵約束;MySQL 8.0.16 增長了對檢查約束的支持。所以咱們強大的 MySQL 支持以上全部約束。
從 MySQL 5.5 開始默認使用 InnoDB 存儲引擎,支持事務處理(ACID)、行級鎖定、故障恢復、多版本併發控制(MVCC)以及外鍵約束等
SQL 是一種聲明性的編程語言,語法接近於天然語言(英語)。經過幾個簡單的英文單詞,例如 SELECT、INSERT、UPDATE、CREATE、DROP 等,完成大部分的數據庫操做。
簡單的查詢示例
能夠看出,SQL 簡單直觀。
分號(;)表示語句的結束
SQL 語句不區分大小寫,可是遵循必定的規則可讓代碼更容易閱讀。
SQL 是一種聲明式的語言,聲明式語言的主要思想是告訴計算機想要什麼結果(what),但不指定具體怎麼作。這類語言還包括 HTML、正則表達式以及函數式編程等。
對於 SQL 語句而言,它所操做的對象是一個集合(表),操做的結果也是一個集合(表)。例如如下查詢:
SELECT emp_id, emp_name, salary FROM employee;
其中 employee 是一個表,它是該語句查詢的對象;同時,查詢的結果也是一個表。因此,咱們能夠繼續擴展該查詢:
SELECT emp_id, emp_name, salary FROM ( SELECT emp_id, emp_name, salary FROM employee ) dt;
咱們將括號中的查詢結果(取名爲 dt)做爲輸入值,傳遞給了外面的查詢;最終整個語句的結果仍然是一個表。
SQL 中的查詢能夠完成各類數據操做,例如過濾轉換、分組彙總、排序顯示等;可是它們本質上都是針對表的操做,結果也是表。
不只僅是查詢語句,SQL 中的插入、更新和刪除都以集合爲操做對象。咱們再看一個插入數據的示例:
CREATE TABLE t(id INTEGER); -- 適用於 MySQL、SQL Server 以及 PostgreSQL INSERT INTO t(id) VALUES (1), (2), (3);
咱們首先使用 CREATE TABLE 語句建立了一個表,而後使用 INSERT INTO 語句插入數據。在執行插入操做以前,會在內存中建立一個包含 3 條數據的臨時集合(表),而後將該集合插入目標表中。因爲咱們一般一次插入一條數據,覺得是按照數據行進行插入;實際上,一條數據也是一個集合,只不過它只有一個元素而已。
UNION ALL 是 SQL 中的並集運算,用於將兩個集合組成一個更大的集合。此外,SQL 還支持交集運算(INTERSECT)、差集運算(EXCEPT)以及笛卡兒積(Cartesian product)
包含 3 個表:員工表(employee)、部門表(department)和職位表(job)。
結構圖,也稱爲實體-關係圖(Entity-Relational Diagram)
關係模型中定義了一個簡單的數據結構,即關係(表),用於存儲數據。SQL 是關係數據庫的通用標準語言,經過聲明的方式執行數據定義、數據操做、訪問控制等。
記住,對於 SQL,一切都是關係(表)。