我的CREATE TABLE MySQL语法有什么问题?

时间:2016-11-14 12:50:00

标签: c# mysql sql create-table

我在使用 CREATE IF NOT EXISTS 子句时遇到了一些麻烦。

我正在使用C#应用程序创建一个MySQL表,已经建立了与DB的连接,所以这不是问题。

当我尝试执行查询时,我得到的错误是一个例外,我收到消息:

  

MySql.Data.MySqlClient.MySqlException(0x80004005):您有错误   在你的SQL语法中;查看与MySQL对应的手册   在'IF NOT EXISTS附近使用正确语法的服务器版本(价格   第3行的VARCHAR,time VARCHAR)

在调试模式下,立即窗口将我的命令字符串显示为:

  

CREATE TABLE ticks_14_11_2016 IF NOT EXISTS(价格VARCHAR,时间   VARCHAR)

从我看到的例子中,这应该是正确的语法。我暂时不担心约束和键,我只需要执行查询...

此外,这是我用来构建字符串和执行查询的C#代码:

string tableName = "ticks_" + getTodayString();
            if (databaseClient.IsConnect()) {
                string tableString = "CREATE TABLE " + tableName +
                " IF NOT EXISTS" +
                "(price VARCHAR, " +
                "time VARCHAR)";

                try
                {
                    var command = databaseClient.Connection.CreateCommand();
                    command.CommandText = tableString;
                    command.ExecuteNonQuery();
                } catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }

变量 databaseClient 的成员是MySQLConnection对象

另外,我的服务器版本是: 5.6.28-76.1

2 个答案:

答案 0 :(得分:3)

您的if not exists位置错误,varchar类型需要强制性长度参数。

更正后的版本应为:

CREATE TABLE IF NOT EXISTS ticks_XXXXX (price VARCHAR(10), time VARCHAR(10));

将长度更改为适合您的长度。

有关详细信息,请参阅reference manual

答案 1 :(得分:0)

您还有其他方法可以检查数据库中是否存在表。

IF OBJECT_ID(N'dbo.ticks_14_11_2016', N'U') IS NOT NULL
BEGIN
    ------Exists
END

IF EXISTS(SELECT 1 FROM sys.Objects WHERE  Object_id = 

OBJECT_ID(N'dbo.ticks_14_11_2016') AND Type = N'U')
BEGIN
   ------Exists
END

    IF EXISTS(SELECT 1 FROM sys.Tables WHERE  Name = N'ticks_14_11_2016 ' AND Type = N'U')
 BEGIN
      ----Exists
 END

IF OBJECT_ID('ticks_14_11_2016') IS NOT NULL
BEGIN
     -----Exists
END

相应地使用您的逻辑