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

如下所示,不同数据库的语法不同。是否存在适用于所有数据库的标准方法。 有没有什么工具可以把任意sql转任意sql

SQLServer2005:

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

数据库:

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

最佳答案

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>

分享和享受。

https://stackoverflow.com/questions/2100619/

相关文章:

php - 不同 php 版本上的不同 sha1 校验和?

regex - 带数字的 CSV 正则表达式

python - 获取当前日期作为方法的默认参数

perl - 为什么我的 CGI 脚本提示 "Can' t locate CGI/Session.p

php - 使用php过滤掉数组中的重复值

bash - 将 bash 中的逗号分隔数据包装成固定的行长度

vb.net - 如何从消息框中获取结果?

delphi - 用Delphi如何获取当前安装的IE版本?

ios-simulator - class_getClassMethod 通常返回 nil(似乎只适

objective-c - 如何使用可为空的 int 或 NSInteger 指针?