MySQL JSON_REMOVE 与多数组

标签 mysql mysql-8.0 mysql-json

我有以下 JSON 文档存储在名为 my_data 的 MySQL 8 列中:

{
  "managers": {
    "11": {
      "created": "2019-11-07"
    },
    "12": {
      "created": "2020-03-12"
    },
  }
}

如何删除“11”信息。

UPDATE table SET my_data = JSON_REMOVE(my_data, ??) WHERE id = 1;

最佳答案

首先,您显示的数据不是有效的 JSON。我认为应该是这样的:

{
  "managers": {
    "11": {
      "created": "2019-11-07"
    },
    "12": {
      "created": "2020-03-12"
    }
  }
}

我设置了一个变量,以便我可以用它进行测试:

mysql> set @j = '...json above...';

我尝试过这个,但它不喜欢使用整数作为路径键:

mysql> select json_remove(@j, '$.managers.11');
ERROR 3143 (42000): Invalid JSON path expression. The error is around character position 13.

所以我将 key 引用为“11”:

mysql> select json_remove(@j, '$.managers."11"');
+-------------------------------------------------+
| json_remove(@j, '$.managers."11"')              |
+-------------------------------------------------+
| {"managers": {"12": {"created": "2020-03-12"}}} |
+-------------------------------------------------+

但我真的会这样做:

DELETE FROM managers WHERE manager_id = 11;

也就是说,根本不使用 JSON。为经理创建一个表,并将 11 或 12 个值作为主键。

在 MySQL 中使用 JSON 只会使编写代码变得更加困难,而且效率也会降低。这就是Inner-Platform Effect antipattern就是这样。

关于MySQL JSON_REMOVE 与多数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64735038/

相关文章:

MySQL计算距离(简单解决方案)

php - 在表单中输入值并使用 codeigniter 插入数据库后获取总值

mysql - 是否不可能有一个检查约束引用一个也有外键的列?

mysql - 如何有效地仅在WITH RECURSIVE语句中保留最新行?

mysql - 将 JSON_EXTRACT 与 CAST 或 STR_TO_DATE 链接失败

mysql - 将默认的 MYSQL JSON 值设置为 `{}` 还是 `NULL` 更好?

php - 在不知道键的情况下使用单个查询更新 MySQL 中的 100k 行

php - MYSQL JSON - 如何访问由数字键索引的嵌套 JSON 对象?

mysql - 从 Json 字段更新嵌套值

php - #1136 - 列数与值数不匹配?