我得到一个有JSON字段的表。字段的默认值是"NULL"-现在我想更新JSON数据的单个字段。

   | ----------------- |
   | [int]  |   [JSON] |
   |  xy    |   ipdata |
   | ----------------- |

所以这个领域可能是这样的:
{ ip: "233.233.233.233", "data": "test", "name": "Peterson", "full_name": "Hanson Peterson" }

所以我想更新IP。
update table set ipdata = JSON_SET(ipdata, "$.ip", "newIp") where xy = 2;

但是如果字段为空会发生什么?上面的查询似乎并没有“创建”一个只有字段IP的新JSON。它什么也不做。
如果字段为空,我如何告诉mySql插入{"ip": "newIp"},否则只需更新ipjson键?

最佳答案

您可以使用Case .. When来处理Null。当字段为null时,您可以创建Json_object()并设置它:

UPDATE table
SET ipdata = CASE WHEN ipdata IS NULL THEN JSON_OBJECT("ip", "newIp")
                  ELSE JSON_SET(ipdata, "$.ip", "newIp")
             END
WHERE xy = "xy";

10-06 05:46