есть ли стандартный sql, который работает во всей базе данных - PullRequest
0 голосов
/ 20 января 2010

Как видно ниже, синтаксис различен для разных баз данных. Нет стандартного способа, который работает во всех базах данных. Есть ли инструмент для преобразования любого 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 ]

7 голосов
/ 20 января 2010

Часть SQL «запроса» (обычно называемая DML - язык манипулирования данными) достаточно стандартизирована, и запросы, написанные в одной базе данных, часто выполняются в другой базе данных, если не используются функции «расширения поставщика». Части SQL «создания битов базы данных» (часто называемые DDL - язык определения данных) не стандартизированы, и каждая база данных делает это немного по-своему. Итак, как вы обнаружили, операторы типа CREATE TABLE, написанные для одной базы данных, не будут работать без некоторой настройки другой базы данных.

<soapbox>
На мой взгляд, это хорошо. DDL эффективно определяет, что может быть создано в базе данных. Если все поставщики используют точно один и тот же DDL, то все продукты будут точно одинаковыми с точки зрения функций, которые они поддерживают. Например, чтобы разрешить наследование таблиц в PostgreSQL, должен быть какой-то способ определить, как одна таблица наследуется от другой, и это определение должно быть частью определения таблицы, либо как часть оператора CREATE TABLE, либо в некоторых другой способ, но это должен быть оператор DDL. Таким образом, по чисто функциональным причинам (поскольку PostgreSQL поддерживает функцию, которую не поддерживает большинство баз данных) DDL в PostgreSQL должен отличаться от других баз данных. Аналогичная ситуация возникает в MySQL, поскольку она позволяет использовать разные механизмы ISAM с разными возможностями. Подобные ситуации возникают в Oracle ... и в SQL Server ... и <your favorite database here>.

Стандарты - это палка о двух концах. С одной стороны, это отличная вещь, потому что они предоставляют «стандартный» способ сделать что-то. С другой стороны, это ужасная вещь, потому что сама цель стандарта состоит в том, чтобы предоставить «стандартный» способ что-то делать, то есть еще один способ сказать «создать стагнацию и подавить инновации».
</soapbox>

Делись и наслаждайся.

2 голосов
/ 20 января 2010

Существует несколько стандартов SQL , и SQL 1999 , вероятно, ближе всего вы получите, поскольку каждая БД приняла свой стандарт (если есть).

0 голосов
/ 20 января 2010

Нет, для этого не существует стандартного SQL. В качестве бесстыдного плагина я могу порекомендовать попробовать Wizardby , если вы занимаетесь чем-либо связанным с миграцией схемы базы данных / непрерывной интеграцией.

...