春眠不覺曉,SQL 知多少?

2021-10-03 03:24:41 字數 3467 閱讀 9415

一九七零年,那是乙個夏天。

有一位來自 ibm 聖約瑟研究實驗室的高階研究員 edgar frank codd 在 communications of acm 上發表了名為《a relational model of data for large shared data banks》的文章,從而建立了關係資料模型。時至今日,基於該模型的關聯式資料庫仍然是資料庫領域的主流;資料庫排名**db-engines 給出了各類資料庫的排名。

codd 也因此在 1981 年獲得了計算機領域最高獎圖靈獎,被人們稱為關聯式資料庫之父。

1974 年,同樣是來自 ibm 的 donald d. chamberlin 和 raymond f. boyce 基於關係模型開發了 sql 的初始版本:sequel(structured english query language)。sequel 被設計用於 ibm 最初的準關聯式資料庫管理系統 systemr。ibm 隨後基於其 systemr 原型開發商業產品,分別於 1979 年、1981 年和 1983 年上市了 system/38、sql/ds 和 db2 資料庫管理系統。

不過早在 1979 年 6 月,relational software,inc.(現在的 oracle 公司)發現了關係模型的潛力,開發出了第乙個商用 sql 實現:oracle v2(version2)。隨著收購開源資料庫 mysql,oracle 公司已經牢牢佔據了資料庫市場的領先地位,同時也導致了 mariadb 分支的出現。

sql 是關係模式的第乙個商業實現,同時也是最成功的乙個實現。sql 是使用最廣泛的資料庫查詢語言。

時間來到了 1986 年,美國國家標準學會(ansi)首先發布了 sql 標準;隨後 iso 標準組織於 1987 年建立了「資料庫語言 sql」標準。在經歷了 1989、1992、1996、1999、2003、2006、2008、2011、2016 以及 2019 年的多次修訂之後,如今的 sql 標準包含了大量的功能,內容多達數千頁。

目前,iso 組織正則定製第 16 部分,屬性圖查詢(sql/pgq)。此前,neo4j 於 2019 年 9 月 17 宣布圖形查詢語言(gql)成為了繼 sql 之後另一種新的 iso 標準資料庫查詢語言。

新的第 16 部分(sql/pgq)主要是為了在 sql 中直接提供一些 gql 功能。

目前最新的 sql 標準是 sql:2019,增加了第 15 部分:iso/iec 9075-15:2019 多維陣列(sql/mda)。sql/mda 允許儲存、訪問和處理規模的多維陣列,例如 n 通道的衛星影象。這意味著 sql 現在可以解碼影象,並且通過畫素座標直接訪問和處理影象區域。

以下是當前 sql 標準的組成部分,其中有一些編號被棄用:

iso 組織提供了一些相關的技術報告。

sql:2016 增加了 44 個可選的新特性,其中 22 個與 json 功能相關,10 多個與多型表函式相關。

這篇文章詳細介紹了 sql:2016 的新功能。

sql:2011 最主要的新功能之一就是增強了對時態資料庫的支援,具體包括:

sql:2008 新增的功能主要包括:

sql:2006 定義了 sql 操作 xml 的方式。它定義了在 sql 資料庫中匯入和儲存 xml 資料、在資料庫中操作 xml 資料,以及以 xml 形式發布 xml 和常規 sql 資料的方法。此外,它還允許應用程式將查詢與 xquery 整合到 sql **中,以便同時訪問 sql 資料和 xml 文件。

sql:2003 標準引入的新功能主要包括:

這裡是一些關於sql:2003 標準的文件。

sql:1999 增加了大量的新功能,並且將 sql 標準分為了幾個部分。

這個**提供了完整的 sql:1999 教程。

sql-92 主要的新增功能包括:

隨後,sql 標準發布了兩個重要的擴充套件:

這裡是一篇 sql-92 標準的原文。

sql(structured query language)是用於管理關係型資料庫或者關係型資料流管理系統的專用語言。sql 是一種宣告式的語言,類似於英語。以下是乙個查詢語句:

-- 注釋:查詢員工資訊

select emp_name, ***, salary *

12from employee

where emp_id =

1;

sql 語句由幾個部分組成:

另外,sql 中一些具有固定意義的單詞被稱為關鍵字,例如 select、create、begin 等。關鍵字一般大寫。

sql 基於關係代數與元組關係演算,表和查詢結果都是由行(元組)的組成的集合;不同之處在於 sql中的相同行可以出現多次,並且可以指定查詢結果的順序(order by)。

sql 提供的主要功能包括:資料定義、資料操作、資料查詢以及資料訪問控制等。

除了這些宣告式的語句之外,sql 也定義了過程語言的擴充套件(sql/psm),也就是儲存過程。

基於以上 sql 標準,許多廠商和組織實現了自己的資料庫產品。常見的資料庫產品包括:

雖然這些資料庫大部分的 sql 語句相同,但是它們都提供了自己的擴充套件語法和功能;因此,我們通常不能直接將一種資料庫中的**遷移到另一種資料庫,需要進行一些**修改。

除此之外,這些資料庫還實現了自己的儲存過程,增加了一些程式設計元素。例如變數定義、控制流語句、異常處理等。

產品實現

ansi/iso標準

sql/psm,sql/持久儲存模組。

mysql

sql/psm,sql/持久儲存模組。

oracle

pl/sql,過程語言/sql。

sql server

t-sql,transact-sql。

postgresql

pl/pgsql,過程語言/pgsql。

這篇文章列出了 11 種常見資料庫對於 sql 的功能實現和示例,包括 oracle、postgresql、sql server、ibm db2、mysql、mariadb、firebird、h2、hsqldb、derby 以及 sqlite。

除了基於關係模型的傳統資料庫之外,市場上還出現了許多 nosql 資料庫。例如 mongodb、redis、apache cassandra 等。nosql 資料庫提供了更高的可用性和可擴充套件性,通過放棄強一致性大幅提公升效能,並且沒有固定模式的限制。

但是由於 nosql 資料庫不支援事務的強一致性(acid),無法適應業務關鍵性的應用;而且nosql 資料庫不提供 sql 介面,各種系統使用自己的實現。

因此,出現了一種新型的資料庫 newsql。簡單來說,newsql = sql + nosql 。newsql 即提供了與 nosql 相同的可擴充套件性,也保留了關聯式資料庫的 acid 事務特性和標準的 sql 介面。

常見的 newsql 產品包括:voltdb、tidb、memsql。