MySQL
MySQL
SELECT JSON_SET(doc, '$.status', 'paid'); -- 有则改、无则插
SELECT JSON_INSERT(doc, '$.vip', true); -- 仅在不存在时插入
SELECT JSON_REPLACE(doc, '$.status', 'paid'); -- 仅在存在时修改
SELECT JSON_REMOVE(doc, '$.temp'); -- 删除键
UPDATE orders SET doc = JSON_SET(doc, '$.status', 'paid') WHERE id = 1;PostgreSQL
PostgreSQL
UPDATE orders
SET doc = jsonb_set(doc, '{status}', '"paid"'::jsonb)
WHERE id = 1;
-- create_missing=false:路径不存在时原样返回(不报错)
SELECT jsonb_set(doc, '{vip}', 'true', false);
-- 删除键或数组元素
SELECT doc - 'temp', doc #- '{a,0}';| MySQL | JSON_SET 插或改;JSON_INSERT 只插;JSON_REPLACE 只改;三者都不破坏其它键 |
|---|---|
| PostgreSQL | jsonb_set(target, path, value[, create_missing]);删除用 - / #- |
| 注意 | PG 的新值需要是 jsonb 字面量(字符串要带引号再 ::jsonb) |