SQL语法错误,找不到它?

时间:2014-04-23 12:07:30

标签: mysql sql ddl

1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在''评论'附近使用。 (' 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')
);

有没有人看到语法错误?

6 个答案:

答案 0 :(得分:3)

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

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 <列所做的那样/ strong>在CREATE声明中。

但是你应该避免使用你知道的关键词作为识别。

答案 1 :(得分: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'时,它会被视为字符串而不是您想要的列

答案 2 :(得分:2)

删除单引号,在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)
);

答案 3 :(得分: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)
);

答案 4 :(得分: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`)
);

答案 5 :(得分:1)

您使用了单引号,这是错误的,仅用于字符串,不用于封闭列名。删除它并使用反引号,因为您有一些关键字,如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`)
);