首先回顾一下JSON的语法规则:
数据在键值对中,
数据由逗号分隔,
花括号保存对象,
方括号保存数组。
MySQL5.7.8 还提供了一些基于Json的函数,包括:
创建JSON | 查询JSON | 修改JSON | META信息 |
---|
创建JSON
类似 varchar,设置 JSON 主要将字段的 type 是 json, 不能设置长度,可以是 NULL 但不能有默认值。
函数说明:
函数名 | 说明 |
---|---|
JSON_ARRAY() | 创建json数组 |
JSON_OBJECT() | 创建json对象 |
JSON_MERGE() | 合并json数组或对象 |
查询JSON
示例数据:
id | category | tags |
---|---|---|
1 | {"id": 1, "name": "lnmp.cn"} | [1, 3, 4] |
2 | {"id": 2, "name": "php.net"} | [1, 3, 5] |
函数说明:
函数名 | 示例 | 说明 |
---|---|---|
JSON_CONTAINS() | JSON_CONTAINS(category,'1','$.id') | 查询category字段下id值为1的json串,判断是否包含某个json值 |
JSON_CONTAINS_PATH() | 判断某个路径下是否包json值 | |
JSON_EXTRACT() | 提取json值 | |
JSON_KEYS() | 提取json中的键值为json数组 | |
JSON_SEARCH() | 按给定字符串关键字搜索json,返回匹配的路径 | |
JSON_UNQUOTE() | 等价于"->>" |
修改JSON
更新 JSON 下的元素,MySQL 并不支持 column->path 的形式
函数名 | 说明 | |
---|---|---|
JSON_APPEND() | 在指定的数组末尾以JSON文本形式追加指定的值并返回。 | |
JSON_ARRAY_APPEND() | ||
JSON_INSERT() | 插入新值,但已经存在的值不会被覆盖 | |
JSON_ARRAY_INSERT() | 插入数组元素 | |
JSON_SET() | 插入新值,并覆盖已经存在的值 | |
JSON_QUOTE() | ||
JSON_REPLACE() | 只替换存在的值 | |
JSON_REMOVE() | 删除 JSON 元素 |
META信息
函数名 | 说明 |
---|---|
JSON_DEPTH() | 返回json文档的最大深度 |
JSON_LENGTH() | 返回json文档的长度 |
JSON_TYPE() | 返回json值得类型 |
JSON_VALID() | 判断是否为合法json文档 |
在5.7.9及之后的版本,可以使用column->path作为JSON_EXTRACT(column, path)的快捷方式。这个函数可以作为列数据的别名出现在SQL语句中的任意位置,包括WHERE,ORDER BY,和GROUP BY语句。同样包含SELECT, UPDATE, DELETE,CREATE TABLE和其他SQL语句。
->左边的参数为JSON数据的列名而不是一个表达式,其右边参数JSON数据中的某个路径表达式。
参考文档:
MySQL 5.7 新特性 JSON 的创建,插入,查询,更新
MySQL5.7中对JSON的支持
官方说明文档