MySQL數據庫基礎教程(一)-簡介

1 歷史背景

1970 年 IBM 的 E.F. Codd 博士發表了論文https://link.springer.com/chapter/10.1007/978-3-642-59412-0_16

MySQL數據庫基礎教程(一)-簡介

並創建了關係模型,通過一個簡單的二維表結構實現數據的存儲。

1979 年 Relational Software, Inc.(後來改名為 Oracle)

MySQL數據庫基礎教程(一)-簡介

發佈了第一個商用的關係數據庫產品。隨後出現了大量的關係數據庫管理系統,包括 MySQL、SQL Server、PostgreSQL 以及大數據分析平臺 Apache Hive、Spark SQL、Presto 等。至今,關係數據庫仍然是數據庫領域的主流。

以下是著名的數據庫系統排名網站 https://db-engines.com/en/ranking 上各種數據庫的排名情況,關係數據庫佔據了絕對的優勢。

MySQL數據庫基礎教程(一)-簡介

2 SQL(Structured Query Language,結構化查詢語言)

SQL 是訪問和操作關係數據庫的標準語言。只要是關係數據庫,都可以使用 SQL 進行訪問和控制。SQL 同樣由 IBM 在

  • 1970s 開發
  • 1986 年成為 ANSI 標準
  • 在 1987 年成為 ISO 標準

SQL 標準隨後經歷了多次修訂,最新的版本為 SQL:2019,增加了多維數組(MDA)的支持。下圖是 SQL 標準的發展歷程和主要的新增功能。

MySQL數據庫基礎教程(一)-簡介

對於 SQL 標準,最熟悉的就是 SQL92 或者 SQL99。但實際上經過多次修改,SQL 早已不是 40 年前的 SQL;如今它已經相當完備,功能強大,並且能夠同時支持關係模型和非關係(XML、JSON)模型。具體來說,最新的 SQL 標準包含 10 個部分:

  • ISO/IEC 9075-1 信息技術 – 數據庫語言 – SQL – 第1部分:框架(SQL/框架)
  • ISO/IEC 9075-2 信息技術 – 數據庫語言 – SQL – 第2部分:基本原則(SQL/基本原則)
  • ISO/IEC 9075-3 信息技術 – 數據庫語言 – SQL – 第3部分:調用級接口(SQL/CLI)
  • ISO/IEC 9075-4 信息技術 – 數據庫語言 – SQL – 第4部分:持久存儲模塊(SQL/PSM)
  • ISO/IEC 9075-9 信息技術 – 數據庫語言 – SQL – 第9部分:外部數據管理(SQL/MED)
  • ISO/IEC 9075-10 信息技術 – 數據庫語言 – SQL – 第10部分:對象語言綁定(SQL/OLB)
  • ISO/IEC 9075-11 信息技術 – 數據庫語言 – SQL – 第11部分:信息與定義概要(SQL/Schemata)
  • ISO/IEC 9075-13 信息技術 – 數據庫語言 – SQL – 第13部分:使用 Java 編程語言的 SQL 程序與類型(SQL/JRT)
  • ISO/IEC 9075-14 信息技術 – 數據庫語言 – SQL – 第14部分:XML 相關規範(SQL/XML)
  • ISO/IEC 9075-15 信息技術 – 數據庫語言 – SQL – 第15部分:多維數組(SQL/MDA)

為了便於學習,通常將主要的 SQL 語句分為以下幾個類別:

MySQL數據庫基礎教程(一)-簡介

  • DQL(data query language),數據查詢語言;也就是 SELECT 語句,用於查詢數據庫中的數據和信息
  • DML(data manipulation language),數據操作語言;用於對錶中的數據進行增加(INSERT)、修改(UPDATE)、刪除(DELETE)以及合併(MERGE)操作
  • DDL(data definition language),數據定義語言;主要用於定義數據庫中的對象(例如表或索引),包括創建對象(CREATE)、修改對象(ALTER)和刪除對象(DROP)等
  • TCL(transaction control language),事務控制語言;用於管理數據庫的事務,主要包括啟動一個事務(BEGIN TRANSACTION)、提交事務(COMMIT)、回退事務(ROLLBACK)和事務保存點(SAVEPOINT)
  • DCL(data control language),數據控制語言;用於控制數據的訪問權限,主要有授權(GRANT)和撤銷(REVOKE)。

SQL 是一種標準,不同廠商基於 SQL 標準實現了自己的數據庫產品,例如 Oracle、MySQL 等。這些數據庫都在一定程度上兼容 SQL 標準,具有一定的可移植性。但另一方面,它們都存在許多專有的擴展,沒有任何一種產品完全遵循標準。

NoSQL

隨著互聯網的發展和大數據的興起,出現了各種各樣的非關係(NoSQL)數據庫。NoSQL 代表 Not only SQL,表明它是針對傳統關係數據庫的補充和升級,而不是為了替代關係數據庫。

NoSQL 數據庫主要用於解決關係數據庫在某些特定場景下的侷限性,比如海量存儲和水平擴展;但同時也會為此犧牲某些關係數據庫的特性,例如對事務強一致性的支持和標準 SQL 接口。因此,這類數據庫主要用於對一致性要求不是非常嚴格的互聯網業務。常見的 NoSQL 數據庫可以分為以下幾類:

  • 文檔數據庫,例如 MongoDB(MongoDB 4.0 增加了多文檔事務的特性)
  • 鍵值存儲,例如 Redis
  • 全文搜索引擎,例如 Elasticsearch
  • 寬列存儲數據庫,例如 Cassandra
  • 圖形數據庫,例如 Neo4J。

另一方面,關係數據庫也在積極擁抱變化,添加了許多非關係模型(XML 和 JSON)支持。以最流行的開源關係數據庫 MySQL 為例,最新的 MySQL 8.0 版本增加了 JSON 文檔存儲的支持,並且推出了一個新的概念:NoSQL + SQL = MySQL。以下是 MySQL 官方的宣傳圖。

MySQL數據庫基礎教程(一)-簡介

Oracle、SQL Server 以及 PostgreSQL 同樣也進行了類似的擴展,可以支持原生的 XML 和 JSON 數據,並且提供了許多標準的 SQL 接口。

NewSQL

為了同時獲得關係數據庫對於事務的支持和標準的 SQL 接口,以及非關係數據庫的高度擴展性和高性能。如今市場上已經出現了一類新型關係型數據庫系統:NewSQL 數據庫。

比較有代表性的 NewSQL 數據庫包括 Google Spanner、VoltDB、PostgreSQL-XL 以及國產的 TiDB。這類新型數據庫是數據庫領域最新的發展方向,有志於在數據庫行業發展的同學可以加以關注。

誰要學習 SQL?

讓我們回到專欄的主題,為什麼要學習 SQL 呢?簡單來說,因為有用。下圖是 Stack Overflow 在 2019 年關於最流行編程技術的調查結果。

MySQL數據庫基礎教程(一)-簡介

作為數據處理領域的專用語言,SQL 排在了第三位,超過 50% 的開發者都需要使用到 SQL。那麼,具體什麼職位需要使用 SQL,用 SQL 來做什麼?

  • 數據分析師:顯然這是一群依靠分析數據為生的人,必不可少需要與數據庫打交道,SQL 是他們必備技能之一。
  • 數據科學家:與數據分析師一樣,數據科學家的日常工作也離不開數據的處理,不可避免需要使用 SQL。
  • 數據庫開發工程師:這個職位基本就是寫 SQL 代碼,實現業務邏輯。
  • 數據庫管理員:也就是 DBA,主要職責是管理和維護數據庫,除了會寫 SQL,還需要負責審核開發人員編寫的 SQL 代碼。
  • 後端工程師:後端開發必然需要涉及數據的處理,需要通過 SQL 與數據庫進行交互。
  • 全棧工程師:既然是全棧,自然包括後端數據的處理。
  • 移動開發工程師:作為一名移動開發工程師,一定對 SQLite 數據庫不會陌生,它是在移動設備中普遍存在的嵌入式數據庫。
  • 產品經理:產品經理需要了解產品的情況,而數據是最好的說明方式,瞭解 SQL 非常有利於對產品的把握。

SQL 不但應用廣泛,而且簡單易學。因為它在設計之初就考慮了非技術人員的使用需求,SQL 語句全都是由簡單的英語單詞組成,使用者只需要聲明自己想要的結果,而將具體的實現過程交給數據庫管理系統。

學習編程,你可能會猶豫選擇 C++ 還是 Java;入門數據科學,你可能會糾結於選擇 Python 還是 R;但無論如何,SQL 都是 IT 從業人員不可或缺的一項技能!

教程內容

本專欄主要討論 SQL 編程技術和思想,分為四個部分:基礎篇、進階篇、開發篇以及擴展篇。

MySQL數據庫基礎教程(一)-簡介

參考

  • SQL 從入門到精通


分享到:


相關文章: