mysql - 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 |
+----+-------+---------------------+
没有插入数据,任何人都可以给出一些提示,我在这里缺少什么。
谢谢。
解决方案
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 。
推荐阅读
- javascript - 如何让搜索框稳定?
- python - 如何将数据帧写入csv到当前工作目录python
- visual-studio - 在构建时在 NuGet 包中包含文件,仅当它不存在时
- android - Android/Kotlin - 选择当前片段
- c# - WPF:列表框自定义项目无法自动调整大小
- git - 结帐 pr 的远程分支
- ms-access - MS-Access 2019 运行时还是 Ms-Access 365 运行时?
- angular - 异步验证器 (AsyncValidatorFn) 从未订阅
- grafana - 为什么grafana不显示数据点?
- intellij-idea - 转到 openfile Intellij ideavim