如何在MySQL中仅更新JSON字段的指定键而不覆盖其余字段内容
MySQL JSON字段局部更新操作方案
MySQL 5.7及以上版本内置了JSON操作函数,无需重写整个JSON结构即可完成指定键的修改、删除操作。
场景1:修改键名(将Covid-19Vaccine Staus改为Covid19VaccineStaus,保留原值、不改动其他键)
实现逻辑:先插入新键并赋值为旧键的取值,再删除旧键,两个操作可合并在同一条更新语句中:
UPDATE `my_json_table` SET `containerValue` = JSON_REMOVE( -- 插入新键,赋值为旧键的原有值 JSON_INSERT(`containerValue`, '$.Covid19VaccineStaus', JSON_EXTRACT(`containerValue`, '$.Covid-19Vaccine Staus')), -- 删除旧键 '$.Covid-19Vaccine Staus' ) WHERE `id` = '94';
补充说明:如果新键Covid19VaccineStaus已经存在,你希望覆盖它的取值,可将JSON_INSERT替换为JSON_SET。如果不需要保留旧键的原值,直接把JSON_EXTRACT部分替换为你要设置的新值即可。
场景2:仅修改指定键的取值(不改动键名、不影响其他键)
后续如果需要单独更新Covid19VaccineStaus的取值,直接用JSON_SET函数即可:
UPDATE `my_json_table` SET `containerValue` = JSON_SET(`containerValue`, '$.Covid19VaccineStaus', 'Vaccinated') WHERE `id` = '94';
操作注意事项
- MySQL的JSON键名大小写敏感,操作时要和实际存储的键名完全匹配
- 建议先执行SELECT语句验证修改结果,确认无误后再执行UPDATE操作,示例验证语句:
SELECT JSON_REMOVE( JSON_INSERT(`containerValue`, '$.Covid19VaccineStaus', JSON_EXTRACT(`containerValue`, '$.Covid-19Vaccine Staus')), '$.Covid-19Vaccine Staus' ) AS modified_json FROM `my_json_table` WHERE `id` = '94';
内容的提问来源于stack exchange,提问作者Bisoux
相关产品推荐
相关产品推荐

