是否有适用于所有数据库的标准sql

时间:2010-01-20 10:28:42

标签: sql standards

如下所示,不同数据库的语法不同。这里有一种适用于所有数据库的标准方法。 有没有工具可以将任何sql转换为任何sql

SQLSERVER2005:

 CREATE TABLE Table01 (  
 Field01  int  primary key identity(1,1)  
 )

SQLite的:

CREATE TABLE Table01 (
  Field01  integer PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE
);

3 个答案:

答案 0 :(得分:7)

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>

分享并享受。

答案 1 :(得分:2)

那里有several SQL standardsSQL 1999可能是你最接近的,因为每个数据库采用不同的标准(如果有的话)。

答案 2 :(得分:0)

不,这没有标准的SQL。作为一个无耻的插件,如果您涉及与数据库模式迁移/持续集成相关的任何事情,我建议您尝试Wizardby