MySQL更新Json不生效

MySQL5.7之后支持了json操作,我们可以很方便的使用相关的函数,通过原生 sql直接操作数据库,现在有一个需求:在tableA中字段info的类型为json,但是历史数据里面info有一部分的值是 null,有一部分的值是其他的 {"key1": "value1"},选在需要给全部的info字段,如果里面有key3,那么值修改改为value3,如果里面没有key3,那么直接追加上 "key3": "value3"

通常我们认为直接通过下面的sql语句就可以解决

1
update tableA set info = json_set(info, '$.key3', "value3") where id = 1;

但是在实际操作过程中,发现如果历史数据里面如果 info字段的值是 null的话,json_set是没有生效的,info字段有值的话,json_set才会生效,那么就需要下面的操作才能完成上面的需求

1
2
update tableA set info = '{"value3": "value3"}' where id = 1 and info is null ;
update tableA set info = json_set(info, '$.key3', "value3") where id = 1 and info is not null;

另外附上一篇文章:https://blog.csdn.net/xc_zhou/article/details/83031343


MySQL更新Json不生效
http://yoursite.com/2021/04/15/数据库/MySQL/MySQL Json/
作者
mohuani
发布于
2021年4月15日
许可协议