在MySQL中创建CONSTRAINT时出现语法错误

时间:2016-08-20 03:46:00

标签: mysql sql

第一个表创建没有问题:

mysql > CREATE TABLE nodes(
     -> id varchar(10) PRIMARY KEY,
     -> user text,
     -> uid varchar(10),
     -> version tinyint,
     -> changeset smallint,
     -> timestamp timestamp
     -> );

当我尝试创建第二个表时,MySQL正在输出错误:

mysql > CREATE TABLE node_tags(
     -> id varchar(10),
     -> key text,
     -> value text,
     -> type text,
     -> CONSTRAINT pk_node_tag PRIMARY KEY (id, key),
     -> CONSTRAINT fk_node_tags_id FOREIGN KEY (id)
     ->  REFERENCES nodes (id)
     -> );
  

错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'附近使用正确的语法   价值文本,   输入文字,   CONSTRAINT pk_node_tag PRIMARY KEY(id,key),   约束'在第3行

3 个答案:

答案 0 :(得分:4)

这成功了。 Key是一个保留字,因此它需要后退。

此外,索引中的文本会限制其大小,以确定索引的大小。它受你现有的角色影响。

以下是:

drop table if exists nodes;
CREATE TABLE nodes
(   id varchar(10) PRIMARY KEY,
    user text,
    uid varchar(10),
    version tinyint,
    changeset smallint,
    timestamp timestamp
)engine=innodb;

drop table if exists node_tags;
CREATE TABLE node_tags
(   id varchar(10) not null,
    `key` text,
    value text,
    type text,
    CONSTRAINT pk_node_tag PRIMARY KEY (id, `key`(255)),
    CONSTRAINT fk_node_tags_id FOREIGN KEY (id) REFERENCES nodes (id)
)engine=innodb;

我强烈建议不要在主键中使用TEXT

答案 1 :(得分:0)

保留关键字,例如键,值,时间戳等'创建列时不应该首选。这会导致错误并且不可扩展。 就这一点而言,使用反引号key将解决此问题。

答案 2 :(得分:0)

因为key是MySQL中的保留字。请参阅此文档以查看保留字列表:https://dev.mysql.com/doc/refman/5.5/en/keywords.html