首页 > 解决方案 > MySQL 5.7 JSON 列更新

问题描述

我正在使用 MySQL 5.7。我有一个带有 JSON 列的表。

MySQL [test_db]> select * from mytable;
+----+-------+---------------------+
| id | name  | hobby               |
+----+-------+---------------------+
|  1 | Rahul | {"Game": "Cricket"} |
|  2 | Sam   | null                |
+----+-------+---------------------+

在这里,对于row id = 2,我想插入一个数据。我做了-

update mytable set hobby = JSON_SET(hobby, '$.Game', 'soccer') where id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

似乎数据插入正确,但是当我检查时

MySQL [test_db]> select * from mytable;
+----+-------+---------------------+
| id | name  | hobby               |
+----+-------+---------------------+
|  1 | Rahul | {"Game": "Cricket"} |
|  2 | Sam   | null                |
+----+-------+---------------------+

没有插入数据,任何人都可以给出一些提示,我在这里缺少什么。

谢谢。

标签: mysqljson

解决方案


Hobby 为 NULL,并且您不能在 NULL 上设置属性,因此请改用 IF 语句,先将 null 转换为空对象(或将 hobby 初始化为空对象而不是 NULL):

UPDATE mytable
SET hobby = JSON_SET(IF(hobby IS NULL, '{}', hobby), '$.Game', 'soccer')
WHERE id = 2;

或者,使用COALESCE

UPDATE mytable
SET hobby = JSON_SET(COALESCE(hobby, '{}'), '$.Game', 'soccer')
WHERE id = 2;

请参阅此处的dbfiddle 。


推荐阅读