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

What is wrong with my CREATE TABLE MySQL syntax?

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

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

我得到的错误是当我尝试执行查询时的异常,我收到消息:

MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXISTS(price VARCHAR, time VARCHAR)' at line 1

在调试模式下,直接window显示我的命令字符串为:

CREATE TABLE ticks_14_11_2016 IF NOT EXISTS(price VARCHAR, time 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

你的 if not exists 放错了地方,而且 varchar 类型需要一个强制长度参数。

更正后的版本应该是:

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

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

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

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

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

相应地使用你的逻辑