SQL标准
為什么要建立標準?
??
為什么說技術標準相當重要?原因很多,最首要的一條就是產品的用戶在購買產品之前能保證產品能達到它所宣稱的功能。如果你能和某家廠商形成伙伴關系,保證 你的數據管理系統一切正常,難道這樣不好嗎?再比如,你在選擇RDMS的時候首先考慮的是其穩定、資源的有效利用率還是因為它支持競爭產品并不擁有的視圖 和事務功能呢?
有一個標準千般好,至少,第3方廠商能由此創建出可應用于整個市場而非某一特定平臺的工具和實用程序。同樣的,單一成品在通過標準認證的情況下更可以增加 其可用資源的比重。產品認證有助于保證產品具有合格的質量和功能特性,反之,那些沒有經過標準認證的“假冒品”到底能在多大程度上遵守標準規范就要大打折 扣了!
針對產品的標準認證程序具有很多優點。然而,不幸的是,恰恰是SQL不具有能滿足這一目標的標準控制體。
為什么標準沒人聽?
將近10年來,美國標準和技術研究所(NIST,該組織接受美國商務部的管理)一直負責提供RDMS的標準測試。6年前,NIST停止執行 ANSI/SQL標準的強制檢測,他們認為,由于廠商缺乏標準兼容性的義務而令標準測試流于形式,標準本身在很大程度上被嚴重忽略了。
今天,大多數數據庫開發商都宣稱其產品遵守SQL-92標準,該標準于1992年發布。然而,當前的標準實際上已經發展到了SQL-99。NIST放棄對 標準的控制原因在于: (1)數據庫標準領域的范圍太大。(2)由于財政上的原因,只有業內財大氣粗的頂級RDMS開發商才有能力制定和實現標準。這兩大因素在極大程度上促使具 體的數據庫產品背離了相關的標準,從而導致數據管理領域的技術混亂,而這卻正是ANSI標準所試圖防范的結果。
哎,這樣一來還談什么標準!
產品的一致性造就平庸
各類數據庫開發商僅在不同程度上遵守ANSI/SQL標準,其目的無非是令他們的產品能具有更具競爭性的優勢,同時滿足客戶的需求。不過,這些產品好歹還能說是遵守ANSI/SQL規范的。為了實現產品的兼容性和標準性,數據庫產品基本上必須滿足以下3個條件:
生產商必須創建可以設置的標志,通過它在用到非標準查詢語句或者功能時可以產生有關的警告。
生產商必須明確地指出違背ANSI/SQL標準的函數屬于產品本身的“擴展(extensions)”,并按照第1條所規定的那樣提供標志特性。
數據庫必須支持“Entry Level SQL92”,該標準版本由以下要素組成:表、列、數據類型、鍵索引、schema操作、行和表約束、視圖、基本關系操作以及編程語言綁定等。
舉個例子,我從Oracle產品下特有的SQL,也就是PL/SQL總結出以下并不遵守規范的技術擴展。
PL/SQL標志擴展:
數組接口包括FOR子句
SQLCA、ORACA和SQLDA數據結構
動態SQL包括DESCRIBE語句
嵌入式PL/SQL代碼塊
自動數據類型轉換
DATE、COMP-3、NUMBER、RAW、LONG RAW、VARRAW、ROWID和VARCHAR數據類型
ORACLE OPTION語句用于指定運行時選項
用于用戶退出的EXEC IAF和EXEC TOOLS語句
CONNECT語句
TYPE和VAR數據類型等價語句
AT db_name子句
DECLARE...DATABASE, ...STATEMENT和 ...TABLE語句
WHENEVER語句的SQLWARNING約束
WHENEVER語句的DO 和STOP行為
COMMIT語句中的COMMENT和FORCE TRANSACTION子句
ROLLBACK語句的FORCE TRANSACTION和TO SAVEPOINT子句
COMMIT和ROLLBACK語句的RELEASE參數
INTO子句中主機變量和WHENEVER...DO標簽的Optional冒號前綴
我本來還想給大家提出一個針對MS SQL Server的查詢語言Transact-SQL的類似兼容性列表,但我沒有找到有關的ANSI/SQL標準兼容性說明文檔。如果你想知道你在使用SQL Server時所用到的函數是否與標準相一致,你不妨利用 ‘set fipsflagger’選項顯示警告信息。
我舉出以上的例子是為了說明以下事實:雖然數據庫開發商宣稱自己的產品仍然處于ANSI RDMS標準的參數控制范圍之內,但是,就算你達到了應用程序編程的技術水準,在沒有綜合考慮的情況下你也無法在不同類型的數據庫產品之間順利遷移。
標準失去了應有的意義。沒有強制標準的執行部門,因而也不存在真正的標準產品。所謂的“遵守ANSI/SQL標準”不過是在市場銷售時的一個漂亮口號而已。對數據庫的應用或者應用程序的開發而言并沒有太大的意義。
ANSI SQL建議
自1996年NIST的數據管理標準程序被放棄之后,現在已經沒有什么認證或者其他機制能檢驗數據庫廠商是否遵守了ANSI SQL標準。市場上的公眾要求和主流產品都一個勁地只為保護客戶投資的利益著想,生產商寧肯向客戶提供更好的產品特性而不刻意追求產品的標準性,其情勢宛 如標準蕩然無存。
我們只有兩個選擇:要不推出某種形式的標準強制執行系統,要不在某些違背標準的特性成為事實上的標準之前把SQL標準降格為某種產品建議。
SQL標準
SQL是Structured Query Language的縮寫,一般讀作/`si:kju:/或“ess-que-el”,即字母“S”、“Q”、“L”的發音。作為一種訪問關系型數據庫的標 準接口,SQL自問世以來得到了廣泛的應用,不僅是著名的大型商用數據庫產品Oracle、Sybase、Informix、DB2、Ingres、 Microsoft SQL Server支持它,一些小型的產品如Visual Foxpro、Access等也支持SQL,很多開源的數據庫產品PostgreSQL、MySQL、Firebird等也支持SQL。如果您是一個初學 者,不妨到sqlcourse.com和sqlcourse2.com去練習一下,很快就能掌握最基本的SQL語句。
藍色巨人IBM對SQL語言的形成和規范化產生了重大的影響,著名的關系數據庫原型系統System R就是IBM的研究成果,它就提供了初步的SQL語言,不過那時稱為SEQUL2。Oracle在1979年率先推出了支持SQL的商用產品,當然,那時 的Oracle并不好用。隨著數據庫技術和應用的發展,為各種不同的關系數據庫系統提供一致的訪問接口成了一種現實需要。
對SQL標準影響最大的機構自然是那些著名的數據庫產商,而具體的制訂者則是一些所謂的非營利機構,例如ISO、ANSI等。各國通常會按照 ISO標準和ANSI標準(這兩個東西的標準很多時候是差不多的)制定自己的國標,我國大致就是翻譯一個對應的中文版,也許外加一點中國特色。其實標準這 個東西本來就很難讀,翻譯成中文也往往是詞不達意,對于學習者和數據庫系統實現者而言,還不如直接讀英文的好。另外,通常的標準都是要MONEY才能得到 的,窮學生們要拜讀一下還真是不容易。雖然正式的標準不像RFC那樣可以輕易從網絡上免費獲得,標準草案還是比較容易找到的。想粗略的學習一下標準,有一 個標準草案也可以了。
下面是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(SQL4)
200N年,ISO/IEC 9075:200N, SQL:200N(SQL5)
??? 細心的讀者能發現,從SQL:1999開始,標準簡稱中的短橫線(-)被換成了冒號(:),而且標準制定的年份也改用四位數字了。前一個修改的原因是ISO標準習慣上采用冒號,ANSI標準則一直采用短橫線。后一個修改的原因是標準的命名也遇到了2000年問題。
?? 從SQL:1999開始,SQL標準的個頭就非常大了,其內容可以說是包羅萬象,已經不僅僅限于SQL語言本身了。SQL:2003就包括以下9個部分:
ISO/IEC 9075-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,其全名是:Joint Technical Committee ISO/IEC JTC 1, Information technology, Subcommittee SC 32, Data management and interchange。
文章《Is SQL a Real Standard Anymore?》對SQL標準化進程提出了置疑?作者是:
Michael M. Gorman - Whitemarsh Information Systems, Corp.
Secretary - ANSI NCITS H2 Technical Committee on Database
參考文獻:
http://www.ansi.orghttp://www.iso.ch
http://sqlstandards.org
http://www.wiscorp.com
SQL99, SQL/MM, and SQLJ: An SQL99, SQL/MM, and SQLJ: An Overview of the SQL Overview of the SQL Standards
SQL:1999, Formerly known as SQL3
ISO/IEC 9075系列標準或其草案
總結
- 上一篇: SwiftyJSON
- 下一篇: linux cmake编译源码,linu