mysql 5.7 json列更新

0tdrvxhp  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(451)

我正在使用MySQL5.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                |
+----+-------+---------------------+

数据没有插入,谁能给点提示,我这里缺什么。
谢谢。

2g32fytz

2g32fytz1#

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;

看这里的小提琴。

相关问题