表结构和测试数据
mysql> show create table tags \G
*************************** 1. row ***************************
Table: tags
Create Table: CREATE TABLE `tags` (
`uuid` varchar(128) DEFAULT NULL,
`values` json DEFAULT NULL,
KEY `uuid_idx_1` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> select * from tags where uuid ='1' \G
*************************** 1. row ***************************
uuid: 1
values: {"k1": "value1", "k2": "value2"}
1 row in set (0.00 sec)
给uuid=1的标签增加一个key: 使用json_merge
mysql> update tags set values = json_merge(values, '{"200" : "abc"}') where uuid = '1';
注意:使用json_merge时,如果没有这个key,会新增,若有,则会把新value合并到原key的value,形成数组
给uuid=1的标签增加一个key:使用json_set
mysql> update tags set values = json_set(values, '$."400"', "123456") where uuid = '1';
注意:使用json_set时,如果没有这个key,会新增,若有,则会被替换。
给uuid=1的标签删掉一个key,使用json_remove
mysql> update tags set values = json_remove(values, '$."100"') where uuid = '1';