@[toc]
1. 结构
1.1 表结构
1 | CREATE TABLE test |
1.2 content 结构
1 | type content struct { |
1.3 arrs 结构
1 | var arrs []int |
2. 插入
2.1 字符串插入
1 | INSERT INTO test('id','content', 'arrs') VALUES (1,'{"name": "pibigstar","age": 20}', '[1,2,3]' ) |
2.2 JSON函数插入
1 | INSERT INTO test('id','content', 'arrs') VALUES (1, JSON_OBJECT("name","pibigstar","age",20), JSON_ARRAY(1,2,3)) |
3. 查询
查询JSON中的数据用 column->path的形式,其中对象类型path的表示方式 .path
3.1 查询内容
1 | SELECT id,content->'$.name' AS name, content->'$.age' AS age, arrs->'$[0]' AS arr1,arrs->'$[1]' AS arr2 FROM test; |
当JSON里面的字段为string时,使用上面的方式查出来内容的带 “”
,可使用 ->> 方式去掉 “”
1 | SELECT id,content->>'$.name' AS name FROM test; |
3.2 搜索条件
3.2.1 全匹配
1 | SELECT * FROM test WHERE content = CAST('{"name": "pibigstar","age": 20}' AS JSON); |
3.2.2 JSON某字段匹配
1 |
|
忽略类型
使用
->>
的方式会忽略其类型
1 | # 查不到 |
3.2.2 使用JSON函数
1 | SELECT * FROM test WHERE JSON_CONTAINS(content,'20','$.age'); |
4. 更新
4.1 全量更新
1 | UPDATE test |
4.2 插入新值(不覆盖已存在值)
1 | UPDATE test |
执行完之后,name值还是 pibigstar,但会新增加一个 sex字段
4.3 插入新值,并覆盖已存在的值
1 | UPDATE test |
执行完之后,name会改变,但会新增加一个 sex字段
4.4 替换某字段值
1 | UPDATE test |
将name从原先的 pibigstar 改为 haimian,它只会替换已存在的字段的值
4.5 删除某字段的值
1 | UPDATE test |
删除 name 和 age 字段