ANSI SQL标准和准则
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
ANSI SQL標(biāo)準(zhǔn)和準(zhǔn)則
SQL:ANSI數(shù)據(jù)庫(kù)管理標(biāo)準(zhǔn)
結(jié)構(gòu)化查詢語(yǔ)言(SQL)是用于訪問(wèn)和管理數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理員(DBA)的標(biāo)準(zhǔn)語(yǔ)言。
多年來(lái),SQL不斷發(fā)展,許多版本和語(yǔ)言開(kāi)始出現(xiàn)。為了統(tǒng)一SQL以獲得最佳實(shí)踐,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)為數(shù)據(jù)庫(kù)查詢語(yǔ)言創(chuàng)建了特定的標(biāo)準(zhǔn)。
SQL時(shí)間軸
-
1970年:為IBM工作的計(jì)算機(jī)Edgar Frank Codd博士于1970年6月在計(jì)算機(jī)協(xié)會(huì)(ACM)期刊上發(fā)表了他的著名論文“大型共享數(shù)據(jù)庫(kù)的數(shù)據(jù)關(guān)系模型”。Codd博士的模型仍然是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)的權(quán)威模型。
-
1978年:?IBM公司在其位于加利福尼亞州的圣何塞研究中心開(kāi)發(fā)數(shù)據(jù)庫(kù)系統(tǒng)System / R以及數(shù)據(jù)庫(kù)語(yǔ)言結(jié)構(gòu)化英語(yǔ)查詢語(yǔ)言(SEQUEL)。它們基于Codd博士的原始模型,他們稱之為SEQUEL。
-
1979年:?Relational Software,Inc。發(fā)布了第一個(gè)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),并將其命名為Oracle。他們的RDBMS在一臺(tái)小型機(jī)上運(yùn)行,??使用SQL作為主要查詢語(yǔ)言。該產(chǎn)品變得如此受歡迎,該公司更名為Oracle。
-
1982年:?IBM發(fā)布了第一個(gè)基于SQL的商用SQL,它們命名為SQL /數(shù)據(jù)系統(tǒng)或SQL / DS,并于1985年發(fā)布了Database 2系統(tǒng)或DB2。兩個(gè)系統(tǒng)都在IBM大型計(jì)算機(jī)上運(yùn)行。IBM稍后將DB2移植到其他系統(tǒng),包括在Windows和UNIX操作系統(tǒng)上運(yùn)行的系統(tǒng)。
ANSI標(biāo)準(zhǔn)逐年
-
1986:?SQL-87最初由ANSI于1986年正式確定。
-
1989年:美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)發(fā)布了第一套數(shù)據(jù)庫(kù)查詢語(yǔ)言標(biāo)準(zhǔn),稱為SQL-89或FIPS 127-1。
-
1992年:?ANSI發(fā)布了修訂后的標(biāo)準(zhǔn)ANSI / ISO SQL-92或SQL2,它們比SQLI更嚴(yán)格,增加了一些新功能。這些標(biāo)準(zhǔn)引入了合規(guī)水平,表明方言符合ANSI標(biāo)準(zhǔn)的程度。
-
1999:?ANSI發(fā)布SQL3或ANSI / ISO SQL:1999,具有新功能,如對(duì)對(duì)象的支持。取代了核心規(guī)范的合規(guī)水平,以及另外9個(gè)封裝的附加規(guī)格。
-
2003:?ANSI發(fā)布SQL:2003,引入標(biāo)準(zhǔn)化序列,XML相關(guān)功能和標(biāo)識(shí)列。第一個(gè)RDBMS的創(chuàng)建者EFCodd博士于同年4月18日去世。
-
2006:?ANSI發(fā)布SQL:2006,定義如何將SQL與XML結(jié)合使用,并使應(yīng)用程序能夠?qū)Query集成到現(xiàn)有的SQL代碼中。
-
2008:?ANSI發(fā)布SQL:2008,引入INSTEAD OF觸發(fā)器以及TRUNCATE語(yǔ)句。
-
2011:?ANSI發(fā)布SQL:2011或ISO / IEC 9075:2011,ISO(1987)的第七個(gè)修訂版和SQL數(shù)據(jù)庫(kù)查詢語(yǔ)言的ANSI(1986)標(biāo)準(zhǔn)。
他們將新的ANSI SQL標(biāo)準(zhǔn)分為九個(gè)部分,包括:
-
第1部分 - ISO / IEC 9075-1:2011?SQL / Framework,它提供了邏輯概念。
-
第2部分 - ISO / IEC 9075-2:2011?SQL / Foundation,包括中心元素SQL。
-
第3部分ISO / IEC 9075-3:2008?SQL /調(diào)用級(jí)接口(CLI)解釋了接口組件,例如用于以各種編碼語(yǔ)言(如COBOL和C ++)執(zhí)行SQL語(yǔ)句的過(guò)程,結(jié)構(gòu)和變量綁定。
-
第4部分ISO / IEC 9075-4:2011?SQL /持久存儲(chǔ)模塊(PSM),概述了SQL的過(guò)程擴(kuò)展標(biāo)準(zhǔn),包括條件處理和控制流,以及語(yǔ)句條件信號(hào)和重新標(biāo)記,以及局部變量和游標(biāo)。將表達(dá)式分配給參數(shù)和變量。解決了持久數(shù)據(jù)庫(kù)語(yǔ)言例程(如存儲(chǔ)過(guò)程)的維護(hù)問(wèn)題。
-
第9部分ISO / IEC 9075-9:2008?SQL /外部數(shù)據(jù)管理(MED),包括用于定義數(shù)據(jù)鏈接類型的SQL擴(kuò)展和允許SQL管理外部數(shù)據(jù)的外部數(shù)據(jù)包裝器。外部數(shù)據(jù)是可訪問(wèn)的,但不受基于SQL的DBMS管理。
-
第10部分ISO / IEC 9075-10:2008?SQL /對(duì)象語(yǔ)言綁定(OLB)定義了SQLJ的語(yǔ)義和語(yǔ)法。SQLJ是將SQL嵌入到Java中。該標(biāo)準(zhǔn)規(guī)定了SQLJ應(yīng)用程序的二進(jìn)制可移植性機(jī)制。它還定義了幾個(gè)Java包及其包含的類。
-
第11部分ISO / IEC 9075-11:2011?SQL /信息和定義Schemata,指定信息模式和定義模式,提供使SQL對(duì)象和數(shù)據(jù)庫(kù)自我描述的工具。包括SQL對(duì)象標(biāo)識(shí)符,安全性和授權(quán)規(guī)范,以及安全性和完整性約束。支持ISO / IEC 9075的功能和包,以及基于SQL的DBMS實(shí)現(xiàn)提供的功能。
-
第13部分 - ISO / IEC 9075-13:2008?ISO / IEC 9075-13:2008:SQL例程和類型使用Java編程語(yǔ)言(JRT),指定將Java類用作SQL結(jié)構(gòu)化用戶定義類型的能力從SQL應(yīng)用程序中調(diào)用靜態(tài)Java方法作為例程,在數(shù)據(jù)庫(kù)中稱為Java。
-
第14部分 - ISO / IEC 9075-14:2011?SQL / XML相關(guān)規(guī)范,定義了在SQL中使用XML時(shí)基于SQL的擴(kuò)展。它概述了XML數(shù)據(jù)類型,例程和函數(shù)。它還描述了在SQL數(shù)據(jù)庫(kù)中存儲(chǔ)和管理XML的XML到SQL數(shù)據(jù)類型映射。
ISO / IEC 13249 SQL多媒體和應(yīng)用程序包與ISO / IEC 9075一起作為單獨(dú)但相關(guān)的標(biāo)準(zhǔn),指定基于SQL的各種接口和包。
該軟件包的目標(biāo)是提供對(duì)最常見(jiàn)的數(shù)據(jù)庫(kù)應(yīng)用程序的集中訪問(wèn),例如圖片,文本,空間數(shù)據(jù)和數(shù)據(jù)挖掘。
如何查找標(biāo)準(zhǔn)副本
由于ISO和ANSI版權(quán)限制,SQL標(biāo)準(zhǔn)規(guī)范的硬拷貝僅可購(gòu)買(mǎi)。您可以在ANSI網(wǎng)站上找到電子副本,方法是選擇“訪問(wèn)標(biāo)準(zhǔn) - eStandards商店”并搜索“SQL語(yǔ)言”。
每個(gè)文檔有兩種變體,但它們是相同的:
INCITS / ISO / IEC 9075 - * - 2011
ISO / IEC 9075 - *:2011
每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建者都希望遵守這些標(biāo)準(zhǔn),從而使SQL的各種實(shí)現(xiàn)變得相似;?但是,每個(gè)實(shí)現(xiàn)仍然具有使用SQL的獨(dú)特方言,包括標(biāo)準(zhǔn)的擴(kuò)展或添加。
將SQL置于測(cè)試中
所有SQL方言的基本SQL命令和語(yǔ)句都是類似的,因此一旦DBA知道如何使用它,他們就可以輕松地學(xué)習(xí)其他方法。
雖然大多數(shù)SQL數(shù)據(jù)庫(kù)程序都有自己的專有擴(kuò)展,但為了符合ANSI標(biāo)準(zhǔn),它們必須至少以相同的方式支持這五個(gè)主要命令:
UPDATE
刪除
選擇
插
哪里
SQL使DBA能夠在數(shù)據(jù)庫(kù)中執(zhí)行以下操作:
-
執(zhí)行查詢
-
檢索數(shù)據(jù)
-
插入,更新和刪除記錄
-
創(chuàng)建新表和視圖
-
建立新的數(shù)據(jù)庫(kù)
-
生成存儲(chǔ)過(guò)程
-
設(shè)置視圖,表和過(guò)程的權(quán)限。
為了生成可以從數(shù)據(jù)庫(kù)訪問(wèn)數(shù)據(jù)的網(wǎng)站,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)數(shù)據(jù)庫(kù)程序是必要的。一些流行的RDBMS程序包括:
-
SQL Server
-
MS Access
-
MySQL的
-
Postgre SQL
-
Oracle數(shù)據(jù)庫(kù)。
為了創(chuàng)建數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)管理員還需要使用以下內(nèi)容:
-
標(biāo)準(zhǔn)的標(biāo)記語(yǔ)言,如CSS / HTML
-
服務(wù)器端腳本語(yǔ)言,例如ASP或PHP。
-
了解如何使用SQL檢索您請(qǐng)求的數(shù)據(jù)。
數(shù)據(jù)庫(kù)的剖析
關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)構(gòu)成了數(shù)據(jù)庫(kù)的基礎(chǔ)。使用RDBMS允許DBA將數(shù)據(jù)存儲(chǔ)在稱為表的數(shù)據(jù)庫(kù)對(duì)象中。表由按部分組織的列和行相關(guān)數(shù)據(jù)組成。
識(shí)別數(shù)據(jù)庫(kù)表
大多數(shù)數(shù)據(jù)庫(kù)包含多個(gè)表,因此DBA必須使用名稱標(biāo)識(shí)每個(gè)表。每個(gè)表都包含包含信息和數(shù)據(jù)的記錄行。
例如,企業(yè)將使用具有客戶表的數(shù)據(jù)庫(kù),該客戶表包含每個(gè)客戶的以下數(shù)據(jù):
顧客姓名
聯(lián)系人姓名
客戶ID
客戶地址 - 街道,城市,郵政編碼和國(guó)家
客戶聯(lián)系信息
在這種情況下,該表包含五個(gè)記錄 - 每個(gè)客戶一個(gè) - 和八列,每個(gè)數(shù)據(jù)塊一個(gè):客戶名稱,聯(lián)系人姓名,客戶ID,包括城市的客戶地址,郵政編碼和國(guó)家/地區(qū),以及客戶聯(lián)系信息。
與SQL數(shù)據(jù)庫(kù)通信
數(shù)據(jù)庫(kù)管理員使用SQL語(yǔ)句執(zhí)行數(shù)據(jù)庫(kù)中所需的所有操作。然后將結(jié)果存儲(chǔ)在結(jié)果表中,稱為結(jié)果集。
SQL通常不區(qū)分大小寫(xiě),并且某些數(shù)據(jù)庫(kù)系統(tǒng)需要在每個(gè)SQL語(yǔ)句的末尾使用分號(hào)。分號(hào)已成為在數(shù)據(jù)庫(kù)系統(tǒng)中將SQL語(yǔ)句彼此分離的標(biāo)準(zhǔn)方法。
這使DBA能夠在一次調(diào)用服務(wù)器時(shí)執(zhí)行多個(gè)SQL語(yǔ)句。
一些SQL命令包括:
-
ALTER TABLE修改表。
-
ALTER DATABASE修改數(shù)據(jù)庫(kù)。
-
CREATE DATABASE創(chuàng)建新數(shù)據(jù)庫(kù)。
-
CREATE INDEX創(chuàng)建索引/搜索鍵。
-
CREATE TABLE創(chuàng)建新表。
-
DELETE從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)。
-
DROP INDEX刪除索引。
-
DROP TABLE刪除表
-
INSERT INTO將新數(shù)據(jù)插入數(shù)據(jù)庫(kù)。
-
SELECT從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)。
-
UPDATE更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
Codd的12條規(guī)則
當(dāng)他創(chuàng)建第一個(gè)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)時(shí),Codd博士包含了13條規(guī)則,建議如果數(shù)據(jù)庫(kù)管理系統(tǒng)滿足所有這些規(guī)則,那么它就是一個(gè)真正的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。
因?yàn)樗麖?到12編號(hào),他們被稱為Codd的12條規(guī)則:
-
規(guī)則零:基礎(chǔ)聲明基本系統(tǒng)必須滿足三個(gè)基本要求:它必須是關(guān)系型的,包括數(shù)據(jù)庫(kù)和管理系統(tǒng)。它還必須專門(mén)利用關(guān)系設(shè)施來(lái)管理數(shù)據(jù)庫(kù),才能被視為真正的RDBMS。
-
規(guī)則一:信息表示以單數(shù)形式表示數(shù)據(jù)庫(kù)中的所有信息,特別是通過(guò)將值放在表行內(nèi)的列位置。
-
規(guī)則二:保證訪問(wèn)所有數(shù)據(jù)都必須是可訪問(wèn)的,就像主鍵的基本要求一樣。通過(guò)定義包含的表和列的名稱以及包含行的主鍵值,可以合理地尋址數(shù)據(jù)庫(kù)中的每個(gè)單獨(dú)標(biāo)量值。
-
規(guī)則三:處理空值?DBMS必須讓每個(gè)字段保持為空或?yàn)榭铡_@意味著它必須以系統(tǒng)的方式支持對(duì)任何不適用或缺失信息的表示的操縱,該方式不同于所有常規(guī)值,并且獨(dú)立于數(shù)據(jù)類型。
-
規(guī)則四:活動(dòng)在線目錄系統(tǒng)必須支持使用其常規(guī)查詢語(yǔ)言的授權(quán)用戶可訪問(wèn)的內(nèi)聯(lián),聯(lián)機(jī),關(guān)系結(jié)構(gòu)或目錄。用戶應(yīng)該能夠使用他們用于訪問(wèn)數(shù)據(jù)庫(kù)內(nèi)部數(shù)據(jù)的相同關(guān)系模型和查詢語(yǔ)言來(lái)訪問(wèn)數(shù)據(jù)庫(kù)的目錄。
-
規(guī)則五:綜合數(shù)據(jù)子語(yǔ)言系統(tǒng)必須支持至少一種具有線性語(yǔ)法的關(guān)系語(yǔ)言。用戶應(yīng)該能夠在應(yīng)用程序中以交互方式利用它。它還必須支持?jǐn)?shù)據(jù)操作操作(如更新和檢索)和數(shù)據(jù)定義操作(如視圖定義)以及事務(wù)管理操作(如提交,開(kāi)始和回滾)。它還應(yīng)該具有完整性和安全性約束。
-
規(guī)則六:更新任何理論上可以更新的視圖都必須由系統(tǒng)更新。
-
規(guī)則七:高級(jí)更新,插入和刪除系統(tǒng)應(yīng)該支持一次更新,插入和刪除操作符,以便用戶可以從由多個(gè)表和/或行的數(shù)據(jù)構(gòu)成的集合中檢索關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)。應(yīng)為任何可檢索集啟用更新,插入和刪除操作,而不是單個(gè)表中的單行。
-
規(guī)則八:物理數(shù)據(jù)獨(dú)立性物理級(jí)別的更新不應(yīng)要求基于結(jié)構(gòu)更新應(yīng)用程序。例如,數(shù)據(jù)存儲(chǔ)方式的更改,例如是否將數(shù)據(jù)放在數(shù)組或鏈接列表中。
-
規(guī)則九:邏輯數(shù)據(jù)獨(dú)立性對(duì)邏輯級(jí)別的更新(例如列,表和行)不應(yīng)要求基于結(jié)構(gòu)更新應(yīng)用程序。實(shí)現(xiàn)邏輯數(shù)據(jù)獨(dú)立性比物理數(shù)據(jù)獨(dú)立性更難。
-
規(guī)則10:完整性獨(dú)立性指定完整性約束必須與應(yīng)用程序和目錄分開(kāi)存儲(chǔ)。必須可以在適當(dāng)時(shí)更新這些約束而不影響任何當(dāng)前存在的應(yīng)用程序。
-
規(guī)則11:分發(fā)獨(dú)立性數(shù)據(jù)庫(kù)用戶不應(yīng)看到數(shù)據(jù)庫(kù)各部分到各個(gè)位置的分布。面對(duì)引入DBMS的分布式版本或當(dāng)前分布式數(shù)據(jù)在整個(gè)系統(tǒng)中重新分配時(shí),所有現(xiàn)有應(yīng)用程序應(yīng)能夠連續(xù)有效地運(yùn)行。
-
規(guī)則12:非顛覆如果系統(tǒng)提供一次一個(gè)記錄或低級(jí)別接口,則無(wú)法利用它來(lái)減少另一個(gè)系統(tǒng)。這種情況的一個(gè)例子是繞過(guò)關(guān)系完整性或安全約束的行為。
結(jié)構(gòu)化查詢語(yǔ)言或SQL已經(jīng)走過(guò)了漫長(zhǎng)的道路,但用于創(chuàng)建它的基礎(chǔ)仍然很強(qiáng)大。隨著云計(jì)算成為常態(tài),數(shù)據(jù)庫(kù)管理員可能會(huì)發(fā)現(xiàn)更多使用它的方式和地點(diǎn);?但是,ANSI將保留用于指定統(tǒng)一數(shù)據(jù)庫(kù)查詢語(yǔ)言的標(biāo)準(zhǔn)。
資源:
ANSI.org
SQL的歷史
W3Resource
←網(wǎng)站管理員工具的最終列表AZHTTP狀態(tài)代碼→
轉(zhuǎn)載于:https://my.oschina.net/hblt147/blog/1843640
總結(jié)
以上是生活随笔為你收集整理的ANSI SQL标准和准则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【神经网络】RBF神经网络逼近任意连续非
- 下一篇: 寻找影响免疫浸润细胞的基因(一)