【问题标题】:MySQL 5.7 JSON column updateMySQL 5.7 JSON 列更新
【发布时间】:2018-07-24 08:30:38
【问题描述】:

我使用的是 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                |
+----+-------+---------------------+

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

谢谢。

【问题讨论】:

    标签: mysql json


    【解决方案1】:

    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 here

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多