我使用的是MySQL 5.7。我有一个带有JSON列的表。
MySQL [test_db]> select * from mytable;
+----+-------+---------------------+
| id | name | hobby |
+----+-------+---------------------+
| 1 | Rahul | {"Game": "Cricket"} |
| 2 | Sam | null |
+----+-------+---------------------+
在这里,对于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 |
+----+-------+---------------------+
数据没有插入,有人能给我一些提示吗,我在这里缺少什么。
谢谢。
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。