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

在MySQL中创建约束时出现语法错误,mysql,sql,Mysql,Sql,创建第一个表时没有出现任何问题: mysql > CREATE TABLE nodes( -> id varchar(10) PRIMARY KEY, -> user text, -> uid varchar(10), -> version tinyint, -> changeset smallint, -> timestamp timestamp -> ); 当我试图创建第二

创建第一个表时没有出现任何问题:

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服务器版本对应的手册,了解使用near的正确语法 值文本, 键入文本, 约束主键节点标记主键(id,键), 第3行的“约束”


这是成功的
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;

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

在创建列时不应首选保留关键字,如“key、value、timestamp等”。这会导致错误,并且不可扩展。
就这点而言,使用backticks
key
可以解决这里的问题。

因为key是MySQL中的保留字。请参阅此文档查看保留字列表:

太好了,已经完成了。谢谢你的帮助,欢迎你。很抱歉,我不能推荐有关
键的内容,因为我对它知之甚少。你最了解你的数据。请记住,它将非常广泛,因此如果将其用作外键,可能会遇到性能问题(当然,与瘦INT相比)