2009-06-04 66 views
6

我記得在大學裏參加了一個數據庫課程,讓學生們有機會選擇我們的數據庫管理系統。作爲我的第一次使用數據庫的經驗,我記得對SQL語句有不同的語法感到困惑,這取決於所使用的數據庫管理系統。直到這個課程,我的印象是SQL語言是用戶可以用來與所有數據庫通信的通用語言。是否有定義和接受的標準SQL語言?

那麼有什麼交易?有沒有定義的SQL標準?如果是這樣,爲什麼數據庫管理系統制造商與規範有所不同?這個標準是否設計得不完整,因爲公司會用它作爲擴展語言的基礎?最初的SQL標準是否過時以及製造商是否需要構建更多功能? /是否原始版本的更新速度不能滿足現代應用程序的需求?它是否創造了收入的商業模式?

謝謝。

回答

7

是的,有SQL ANSI標準,請參閱。 a draft of the SQL-92 one。但是,每個數據庫供應商都實現了標準SQL的「擴展子集」 - 如果你仔細想一想,從某種意義上說,任何東西都是其他任何東西的「擴展子集」;-)。毫無疑問,這背後有商業原因,但即使非商業實現(如PostgreSQL)的行爲也差不多...

8

有SQL標準:

http://en.wikipedia.org/wiki/SQL#Standardization

然而,大多數DBMS仍然執行標準的有些定製或擴展版本。 (Microsoft SQL Server是主要的嫌疑人)。

+1

您是否有任何比較「可維護的Sybase與MS SQL Server與MySQL ANSI的兼容性?或者這只是假設,因爲它是MS? – gbn 2009-06-04 07:09:48

+1

一旦你考慮了MySQL正在做什麼,SQL Server真的不是那麼糟糕。根據我的經驗,來自商業世界的Oracle和來自開源世界的Firebird是最符合標準的DBMS。 – 2009-06-04 07:12:06

4

數據操作語言(SELECT,UPDATE,INSERT:SQL),數據定義語言CREATE,DELETE:SQL),數據控制語言(GRANT:SQL)。

SQL可以涵蓋所有這些部分,但有時供應商不喜歡SQL的方式。有時他們不執行部分(見DCL)。在現實之後,更多的時候是標準「追蹤」(參見DML中的Xpath-expressions),他們只是創建了自己的語法。

3

是原來的SQL標準已經過時 和製造商需要建立更多的 功能?是/原來不是 更新速度保持與 現代應用程序的需求?是否以 創造收入的商業模式?

我認爲這些是主要因素。該標準沒有涵蓋一些有用的功能,供應商熱衷於添加功能,使客戶選擇他們的實施,而不是遊說儘快使其標準化。

2

有一個標準化的SQL。正如其他答覆所述,數據庫供應商隨附特定於其數據庫引擎的擴展。根據我對數據庫的經驗(特別是在大型數據庫的情況下),嘗試實施「跨供應商」數據庫沒什麼意義。例如,數據定義語言的擴展允許開發者/ dba使用供應商的特定功能(例如表格的物理表示,關於表格的存儲的細節,索引facitilites等)來優化數據庫性能。在查詢的情況下,對於大型數據庫,您可能還需要向數據庫引擎提供建議執行計劃的提示。提示的語法再一次針對供應商。

這些是可能產生重大影響的「非標準」功能的一些示例。

不幸的是,根據我的經驗,很多客戶或技術人員(架構師?)對數據庫細節的關注較少,並且錯過了數據庫爲數據管理和訪問提供的強大功能。