【问题标题】:Is there a fast way to update one json column data with MySQL?有没有一种快速的方法来使用 MySQL 更新一个 json 列数据?
【发布时间】:2021-04-25 12:18:04
【问题描述】:

表中有一个列

table: articles
rows:  id           type: int(11)
       json_data    type: json
       created_at   type: datetime
       updated_at   type: datetime

现在json_data 是

{
   "version":"1",
   "title":"A good product",
   "body":"Very good",
   "published_at":null
}

想要根据当前的元数据将其数据更新为新的 json 模式格式:

{
   "version":"2",
   "items":[
      {
         "title":"A good product",
         "body":"Very good",
         "published_at":null
      }
   ]
}

如果不使用编程语言怎么办。是否可以通过 MySQL 的程序来实现?

【问题讨论】:

  • 这可以在一个查询中执行。不需要存储过程或外部处理。

标签: mysql json database procedure data-migration


【解决方案1】:
UPDATE articles
SET json_data = JSON_OBJECT('version', 2, 
                            'items', JSON_ARRAY(JSON_REMOVE(json_data, '$.version')));

fiddle


如果运行两次更新命令,数据将变为嵌套并破坏格式 - fiddle。你知道如何避免它甚至运行多次吗? – iooi

添加适当的 WHERE,检查“$.version”,仅更新该值为 1 的那些行:

UPDATE articles
SET json_data = JSON_OBJECT('version', 2, 'items', JSON_ARRAY(JSON_REMOVE(json_data, '$.version')))
WHERE json_data->>"$.version" = 1;

fiddle

【讨论】:

  • 非常强大。非常感谢!
  • 如果运行两次更新命令,数据将变为嵌套并破坏格式 - fiddle。你知道如何避免它甚至运行多次吗?
  • @iooi 添加适当的 WHERE,检查“$.version”,仅更新该值为 1 的行。
猜你喜欢
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 2021-05-02
  • 1970-01-01
相关资源
最近更新 更多