2012-07-02 2 views
0

Я хотел бы создать БД. У меня есть файл сценария .SQL нравится:Что это за синтаксис CREATE TABLE?

CREATE TABLE [AlleleFreqBySsPop] 
(
[subsnp_id] [int] NOT NULL , 
[pop_id] [int] NOT NULL , 
[allele_id] [int] NOT NULL , 
[source] [varchar](2) NOT NULL , 
[cnt] [real] NULL , 
[freq] [real] NULL , 
[last_updated_time] [datetime] NOT NULL 
) 
GO 

Это, кажется, отличается от MySQL или PostgreSQL.

Какой тип этого языка? Как я могу использовать его?

+1

Работает ли он в MySQL? Это все еще SQL, но он использует квадратные скобки в качестве разделителей имен. Не знаете, какие платформы поддерживают эти платформы, но попробуйте в db, вы ожидаете, что он будет работать в ... ':)' – halfer

+1

'[' и ']' являются общими разделителями на MSSQL – Jodrell

ответ

6

Судя по квадратным скобкам и ключевому слову GO, я бы сказал, что это T-SQL (MS SQL Server). Чтобы использовать его в MySQL, вы могли бы просто удалить квадратные скобки и решить проблему несовместимости (т. Е. Типы или отсутствие экранирования) оттуда.

Я только что протестировал это в SQL Fiddle, и в этом случае просто удалить квадратные скобки. Однако для других операторов DDL вам может понадобиться подставить типы (то есть datetime2 из T-SQL не поддерживается в MySQL), и вы можете столкнуться с другими проблемами - например, необходимость избегать имен столбцов, которые являются зарезервированными ключевыми словами на одном диалекте, но а не другие и т. д. Обычные базы данных SQL do not use 100% standards compliant SQL.

+0

хорошей точкой на 'GO' – Jodrell

4

Я предполагаю, что вы имеете в виду [text], ориентируясь на скобки? Это просто разделитель имен.

Here is a SQLFiddle to show this working in MS SQL Server

Here is a SQLFiddle to show this working in SqlLite (но только если вы удалили GO в конце (Спасибо Ypercube за указание, что выход) ... в противном случае, это просто MSSQL, что будет работать)

Это делает появляются ошибки в MySQL, PostgreSQL и Oracle. Надеюсь, это поможет разобраться. SqlFiddle это отличный инструмент, чтобы проверить вещи, как это :)

Here is the SQL Server documentation on delimited identifiers

+0

Вопрос помечен тегом [tag: mysql]. – eggyal

+0

@eggyal Я уточнил свой ответ дальше для каждого языка –

+0

Действительный пункт Джастина. Тем не менее, 'GO' означает, что он не будет работать в SQLite. Только в SQL-Server. –

0

Своего Thats SQL с помощью [ и ] в качестве разделителей или «Non Цитируется идентификатор» так, вероятно, из источника TSQL.

Я считаю, что если вы подставляете [ и ] для действительных разделителей на своей платформе или в настройках или просто удаляете их, тогда это должен быть абсолютно правильный SQL.

В целом разделители - это хорошо и может помочь механизму SQL для анализа запроса.

Смежные вопросы