在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相比)