最近发现有个数据是用JSON格式直接存到表格里面的,大概就是下面这样的
然后需要修改里面某个属性的值,一开始我想的是 REPLACE 替换
UPDATE test_1 SET content = REPLACE(content, '{"age": 15, "name": "w5"}', '{"age": 20, "name": "20"}')
可以发现也能实现
但总觉得不大对劲,所以去搜了一下,发现两个以前没用过的方法 JSON_REPLACE 和 JSON_SET
我们先来试一下 JSON_REPLACE
UPDATE test_1 SET content = JSON_REPLACE(content, '$.name', "w5") WHERE id = 3
再来试下 JSON_SET
UPDATE test_1 SET content = JSON_SET(content, '$.age', 15) WHERE id = 3
发现这三个都能实现我们的目的,那这三个有什么区别
特性 | REPLACE | JSON_SET | JSON_REPLACE |
---|---|---|---|
作用对象 | 字符串中的子字符串 | JSON 数据中的键值对 | JSON 数据中的已存在键值对 |
是否考虑 JSON 结构 | 不考虑,简单的字符替换 | 处理 JSON 数据,修改或新增键值对 | 处理 JSON 数据,仅替换已存在的键值对 |
新增键值对 | 不支持 | 支持,如果路径不存在会新增 | 不支持,路径不存在时不做任何操作 |
修改现有键值对 | 不适用于 JSON 键值对的修改 | 支持,修改路径存在的键值对 | 支持,只修改路径存在的键值对 |
适用场景 | 字符串替换,适合非结构化数据 | 修改 JSON 数据或新增键值对 | 只需要替换 JSON 中已存在的键值对时使用 |
是否破坏数据结构 | 可能会破坏 JSON 结构 | 不会破坏 JSON 结构 | 不会破坏 JSON 结构,确保数据一致性 |