ER_JSON_USED_AS_KEY:JSON 列“parent_ids”仅支持通过指定 JSON 路径上生成的列进行索引
Posted
技术标签:
【中文标题】ER_JSON_USED_AS_KEY:JSON 列“parent_ids”仅支持通过指定 JSON 路径上生成的列进行索引【英文标题】:ER_JSON_USED_AS_KEY: JSON column 'parent_ids' supports indexing only via generated columns on a specified JSON path 【发布时间】:2018-12-27 01:54:56 【问题描述】:我正在使用 Node.js 和 mysql,我对此很陌生。我尝试设置一个表,其中有一列接受 JSON 数据。我这样做是因为我有一个父表和子表类型的格式,并且父母可以保存多个 child_id。
CREATE TABLE IF NOT EXISTS parents(
parent_id int PRIMARY KEY auto_increment,
first_name VARCHAR(255),
middle_name VARCHAR(255),
last_name VARCHAR(255),
child_ids JSON
);
我使用这个查询将数据插入到父表中:
connection.query(`INSERT INTO parents (first_name, middle_name, last_name, child_ids) VALUES ('John', 'Malcom', 'Smith', '"child_1": 129314812, "child_2": 18436987');`, function(err, results, fields)
if (err) console.log(err.message);
);
但是,我收到了这个错误,我似乎找不到任何关于:
ER_JSON_USED_AS_KEY: JSON column 'parent_ids' supports indexing only via generated columns on a specified JSON path.
如果有人知道这件事,请帮助我!
编辑:我已将此命令注释掉,但我不再收到错误消息:
ALTER TABLE childs ADD FOREIGN KEY(parent_ids) REFERENCES parents(parent_id);
但是我要怎么做才能添加外键呢?
【问题讨论】:
如果您尝试在child_ids
列上创建索引,则会出现该错误消息。我不认为它可以来自仅仅做一个INSERT
。
我猜您将主键 (parent_ids) 设置为 JSON,并且由于主键具有隐式索引,因此它会失败。在任何情况下,您的示例代码和错误消息都不匹配。
... JSON columns cannot be indexed directly.
,检查13.1.18.9 Secondary Indexes and Generated Columns。请参阅Indexing JSON documents via Virtual Columns 中的评论。
【参考方案1】:
感谢大家的帮助!该错误已通过删除表之间的外键绑定得到修复。我在每个表中都有一个相互引用的外键,但它不能正常工作。
【讨论】:
以上是关于ER_JSON_USED_AS_KEY:JSON 列“parent_ids”仅支持通过指定 JSON 路径上生成的列进行索引的主要内容,如果未能解决你的问题,请参考以下文章
python中json文件处理涉及的四个函数json.dumps()和json.loads()json.dump()和json.load()的区分
JSON相关 JSON在线解析 JSON压缩转义工具 JSON着色工具 JSON 在线格式化工具 在线XML/JSON互相转换工具 XMLJSON在线转换
python中json文件处理涉及的四个函数json.dumps()和json.loads()json.dump()和json.load()的区分
python中json文件处理涉及的四个函数json.dumps()和json.loads()json.dump()和json.load()的区分
Python中json文件处理的四个函数json.dumps()json.loads()json.dump()和json.load()的区分