什么是这种不寻常的CREATE TABLE语法?

时间:2012-07-02 17:12:04

标签: mysql sql

我想创建数据库。 我有一个像这样的脚本文件.sql:

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不同。

这是什么类型的语言?我该如何使用它?

3 个答案:

答案 0 :(得分:6)

根据方括号和GO关键字判断,我会说这是T-SQL(MS SQL Server)。要在MySQL中使用它,你可以从那里删除方括号并解决不兼容性(即类型或丢失转义)。

我刚刚在SQL Fiddle中对此进行了测试,在这种情况下,只需删除方括号即可。但是,对于其他DDL语句,您可能必须替换类型(即MySQL中不支持来自T-SQL的datetime2),并且您可能会遇到其他问题 - 例如需要转义保留关键字的列名一种方言,但不是另一种,等等。通常的SQL数据库do not use 100% standards compliant SQL

答案 1 :(得分: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

答案 2 :(得分:0)

它的SQL使用[]作为分隔符或“非引用标识符”,因此可能来自TSQL源。

我相信如果您在您的平台或设置上将[]替换为有效分隔符,或者只是删除它们,那么它应该是完全有效的SQL。

通常,分隔符是一件好事,可以帮助SQL引擎解析查询。