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压缩转义工具 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()的区分