第一个表创建没有问题:
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行
答案 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