SQL標準簡介,sql簡介

來源:互聯網
上載者:User

SQL標準簡介,sql簡介

按:這是基於我很早以前寫的幾篇短文重新整理的。

  SQL是Structured Query Language的縮寫,它的前身是著名的關聯式資料庫原型系統System R所採用的SEQUEL語言。作為一種訪問關係型資料庫的標準語言,SQL自問世以來得到了廣泛的應用,不僅是著名的大型商用資料庫產品Oracle、DB2、Sybase、SQL Server支援它,很多開源的資料庫產品如PostgreSQL、MySQL也支援它,甚至一些小型的產品如Access也支援SQL。近些年蓬勃發展的NoSQL系統最初是宣稱不再需要SQL的,後來也不得不修正為Not Only SQL,來擁抱SQL。

  藍色巨人IBM對關聯式資料庫以及SQL語言的形成和正常化產生了重大的影響,第一個版本的SQL標準SQL86就是基於System R的手冊而來的。可惜IBM起先並沒有什麼產品化的想法,倒是Oracle在1979年率先推出了支援SQL的商用產品。隨著資料庫技術和應用的發展,為各種不同的關聯式資料庫系統提供一致的語言成了一種現實需要。

  對SQL標準影響最大的機構自然是那些著名的資料庫產商,而具體的制訂者則是一些非營利機構,例如國際標準組織ISO、美國國家標準委員會ANSI等。各國通常會按照 ISO標準和ANSI標準(這兩個機構的很多標準是差不多等同的)制定自己的國家標準。中國是ISO標準委員會的成員國,也經常翻譯一些國際標準對應的中文版。標準為了避免採用具體產品的術語,往往會抽象出很多名詞,從而增加了閱讀和理解的難度,翻譯成中文之後更容易詞不達意。對於資料庫系統實現者和使用者而言,很多時候還不如直接讀英文版本為好。雖然正式的標準不像RFC那樣可以從網路上免費獲得,標準草案還是比較容易找到的(例如:http://www.jtc1sc32.org/doc/)。待獲批准的標準草案和最終的標準也沒有什麼實質上的區別,能夠滿足日常工作的需要。

  下面是SQL發展的簡要曆史:
1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86 
1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89 
1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2) 
1999年,ISO/IEC 9075:1999,SQL:1999(SQL3) 
2003年,ISO/IEC 9075:2003,SQL:2003
2008年,ISO/IEC 9075:2008,SQL:2008
2011年,ISO/IEC 9075:2011,SQL:2011

  細心的讀者能發現,從SQL:1999開始,標準簡稱中的虛線(-)被換成了冒號(:),而且標準制定的年份也改用四位元字了。前一個修改的原因是ISO標準習慣上採用冒號,ANSI標準則一直採用虛線。後一個修改的原因是標準的命名也遇到了2000年問題。

  SQL86大概只有幾十頁,SQL92本文大約有500頁,而SQL99則超過了1000頁。可以看出,從SQL99開始,SQL標準的個頭就非常龐大了,內容包羅永珍,已經沒有人能夠掌握標準的所有內容了。以SQL:2003為例,它包括以下9個部分(中間編號空缺是曾經被佔用,之後被廢棄的標準造成的):

ISO/IEC9075-1: Framework (SQL/Framework)
ISO/IEC 9075-2: Foundation (SQL/Foundation)
ISO/IEC 9075-3: Call Level Interface (SQL/CLI)
ISO/IEC 9075-4: Persistent Stored Modules (SQL/PSM)
ISO/IEC 9075-9: Management of External Data (SQL/MED)
ISO/IEC 9075-10: Object Language Bindings (SQL/OLB)
ISO/IEC 9075-11: Information and Definition Schemas (SQL/Schemata)
ISO/IEC 9075-13: Java Routines and Types Using the Java Programming Language(SQL/JRT)
ISO/IEC 9075-14: XML-Related Specifications (SQL/XML)

      負責具體制定工作的是ISO和IEC聯合成立的一個技術委員會JTC1/SC32。正因為關聯式資料庫市場非常成熟,競爭不夠激烈,標準本身變得過於龐大等原因,SQL3制定的周期很長,制定期間也存在很多爭議。例如文章《Is SQL a Real Standard Anymore?》對SQL標準化進程提出了置疑。

  如果要瞭解標準的內容,比較推薦的方法是泛讀SQL92(因為它涉及了SQL最基礎和最核心的一些內容),然後增量式的閱讀其他標準。標準在每次更新的時候,委員會的成員們都為大家提供比較好的介紹文檔。例如針對最新的SQL:2011,SIGMODRecord上就有很不錯的介紹:http://www.sigmod.org/publications/sigmod-record/1203/pdfs/10.industry.zemke.pdf

  最後再簡要介紹一下SQL標準的符合程度。絕大多數人提起SQL標準,涉及的內容其實是SQL92裡頭最基本或者說最核心的一部分。SQL92本身是分級的,包括入門級、過度級、中間級和完全級。為了驗證具體的產品對標準的遵從程度,NIST還曾經專門發起了一個項目,來做標準符合程度的測試集合:http://itl.nist.gov/div897/ctg/sql_form.htm。不過,SQL標準包含的內容實在太多了,而且有很多特性對新的SQL產品而言也越來越不重要了。從SQL99之後,標準中符合程度的定義就不再分級,而是改成了核心相容性和特性相容性;也沒有機構來推出權威的SQL標準符合程度的測試認證了。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.