【问题标题】:SQL syntax error, Can't find it?SQL语法错误,找不到?
【发布时间】:2014-04-23 12:07:29
【问题描述】:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 ''cmets' 附近使用正确的语法('id' int(10) unsigned NOT NULL AUTO_INCREMENT, 'article_i' at line 1

CREATE TABLE IF NOT EXISTS 'comments' (
    'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
    'article_id' int(10) NOT NULL,
    'comment' varchar(45) NOT NULL,
    'time' datetime NOT NULL,
    'name' varchar(45) NOT NULL,
    'email' varchar(45) NOT NULL,
    PRIMARY KEY ('id'),
    KEY 'fk_comments_article'('article_id')
);

有人看到语法错误吗?

【问题讨论】:

  • 'id' 是字符文字(“字符串”)而不是列名(标识符)。删除所有这些单引号,你应该没问题。

标签: mysql sql ddl


【解决方案1】:

使用反引号代替单引号。单引号用于字符串文字。

CREATE TABLE IF NOT EXISTS `comments` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `article_id` int(10) NOT NULL,
    `comment` varchar(45) NOT NULL,
    `time` datetime NOT NULL,
    `name` varchar(45) NOT NULL,
    `email` varchar(45) NOT NULL,
    PRIMARY KEY (`id`),
    KEY fk_comments_article(`article_id`)
);

反引号 ` 用于启用标识符,如果它们恰好是 MySQL 中的关键字,则可以将其用作列名/表名。

这是推荐的方式,因为我们不太可能事先知道所有关键字,并且可能最终使用关键字之一作为列/表的名称,就像您对列所做的那样 time 在您的 CREATE 声明中。

但您应该避免使用您知道的关键字作为标识符。

【讨论】:

    【解决方案2】:

    去掉单引号。试试这个:

    CREATE TABLE IF NOT EXISTS comments (
        id int(10) unsigned NOT NULL AUTO_INCREMENT,
        article_id int(10) NOT NULL,
        comment varchar(45) NOT NULL,
        time datetime NOT NULL,
        name varchar(45) NOT NULL,
        email varchar(45) NOT NULL,
        PRIMARY KEY (id),
        KEY 'fk_comments_article'(article_id)
    );
    

    或尝试使用反引号:

    CREATE TABLE IF NOT EXISTS `comments` (
        `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
        `article_id` int(10) NOT NULL,
        `comment` varchar(45) NOT NULL,
        `time` datetime NOT NULL,
        `name` varchar(45) NOT NULL,
        `email` varchar(45) NOT NULL,
        PRIMARY KEY (`id`),
        KEY fk_comments_article(`article_id`)
    );
    

    您收到此错误是因为当您编写 'id' 时,它会被视为字符串而不是您想要的列

    【讨论】:

    • @user3481441:- 不客气!
    【解决方案3】:

    去掉单引号,在SQL Fiddle下面的查询中测试:

    CREATE TABLE IF NOT EXISTS comments (
        id int(10) unsigned NOT NULL AUTO_INCREMENT,
        article_id int(10) NOT NULL,
        comment varchar(45) NOT NULL,
        time datetime NOT NULL,
        name varchar(45) NOT NULL,
        email varchar(45) NOT NULL,
        PRIMARY KEY (id),
        KEY fk_comments_article(article_id)
    );
    

    【讨论】:

      【解决方案4】:

      删除'

      CREATE TABLE IF NOT EXISTS comments (
          id int(10) unsigned NOT NULL AUTO_INCREMENT,
          article_id int(10) NOT NULL,
          comment varchar(45) NOT NULL,
          time datetime NOT NULL,
          name varchar(45) NOT NULL,
          email varchar(45) NOT NULL,
          PRIMARY KEY (id),
          KEY fk_comments_article(article_id)
      );
      

      【讨论】:

        【解决方案5】:

        将所有单引号 ' 替换为反引号或直接删除单引号。

        CREATE TABLE IF NOT EXISTS `comments` (
            `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
             `article_id` int(10) NOT NULL,
            `comment` varchar(45) NOT NULL,
            `time` datetime NOT NULL,
            `name` varchar(45) NOT NULL,
            `email` varchar(45) NOT NULL,
            PRIMARY KEY (`id`),
            KEY `fk_comments_article`(`article_id`)
        );
        

        【讨论】:

          【解决方案6】:

          您使用了单引号,单引号已磨损并仅用于字符串,而不用于包含列名。删除它并使用反引号,因为您有一些关键字,例如 TIME, NAME:

          试试:

          CREATE TABLE IF NOT EXISTS `comments` (
              `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
              `article_id` INT(10) NOT NULL,
              `comment` VARCHAR(45) NOT NULL,
              `time` DATETIME NOT NULL,
              `name` VARCHAR(45) NOT NULL,
              `email` VARCHAR(45) NOT NULL,
              PRIMARY KEY (`id`),
              KEY fk_comments_article(`article_id`)
          );
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-01-10
            • 2014-08-27
            • 2019-04-12
            • 1970-01-01
            • 1970-01-01
            • 2019-01-16
            • 1970-01-01
            相关资源
            最近更新 更多