SQL的「查詢」部分(通常稱爲DML-數據操作語言)是合理標準化的,如果沒有使用「供應商增強」功能,寫入一個數據庫的查詢通常會運行在另一個數據庫上。 SQL的「創建數據庫位」部分(通常稱爲DDL - 數據定義語言)沒有標準化,而且每個數據庫都有一點不同。因此,正如您發現的那樣,爲某個數據庫編寫的語句(如CREATE TABLE)不會在未對另一個數據庫進行調整的情況下運行。
<soapbox>
在我看來,這是一件好事。 DDL有效地定義了可以在數據庫中創建的內容。如果所有供應商使用剛好相同的DDL,那麼所有產品將在正好就其所支持的功能而言。例如,爲了允許PostgreSQL中的表繼承,必須有一些方法來定義一個表是如何從另一個表繼承的,並且這個定義必須是如何定義表的一部分,既可以作爲CREATE TABLE語句的一部分,也可以作爲其他時尚,但它必須是一個DDL聲明。因此,出於純粹的功能性原因(因爲PostgreSQL支持大多數數據庫不支持的功能),PostgreSQL 中的DDL必須與其他數據庫中的不同。在MySQL中也會出現類似的情況,因爲它允許使用具有不同功能的不同ISAM引擎。類似的情況出現在Oracle ...和SQL Server中......以及<your favorite database here>
。
標準是一把雙刃劍。一方面他們是一件好事,因爲他們提供了一種「標準」的做事方式。另一方面,這是一件可怕的事情,因爲標準的目的是提供一種「標準」的做事方式,這是另一種說法:「製造停滯和抑制創新」。
</soapbox>
分享和享受。
我認爲,即使個人數據庫有一些變化,所有數據庫應至少與基本功能,如外鍵,主鍵,唯一,非空約束兼容的標準。 – Thunder 2010-01-21 04:55:27