设为首页 收藏本站
查看: 740|回复: 0

[经验分享] MySQL 5.7新支持--------Json类型实战

[复制链接]

尚未签到

发表于 2018-9-28 09:58:52 | 显示全部楼层 |阅读模式
  1. 背景
  * 在MySQL 5.7.8中,MySQL支持由RFC 7159定义的本地JSON数据类型,它支持对JSON(JavaScript对象标记)文档中的数据进行有效访问.
  * MySQL会对DML JSON数据自动验证。无效的DML JSON数据操作会产生错误.
  * 优化的存储格式。存储在JSON列中的JSON文档转换为一种内部格式,允许对Json元素进行快速读取访问.
  * MySQL Json类型支持建立索引增加查询性能提升.
  2. Json类型所需的存储空间和值范围
类型占用字节最大长度Json数据长度 + 4 bytes4G  3. Json相关函数操作
  * JSON_OBJECT(string1, string2...) 创建 key-value 类型 Json 对象
mysql> SELECT JSON_OBJECT('k1', 'v1', 'k2', 'v2');  
+-------------------------------------+
  
| JSON_OBJECT('k1', 'v1', 'k2', 'v2') |
  
+-------------------------------------+
  
| {"k1": "v1", "k2": "v2"}            |
  
+-------------------------------------+
  
1 row in set (0.01 sec)
  * JSON_ARRAY(string1, string2...) 创建一个 Json 数组
mysql> SELECT JSON_ARRAY('a', 'b', 'c', 'd');  
+--------------------------------+
  
| JSON_ARRAY('a', 'b', 'c', 'd') |
  
+--------------------------------+
  
| ["a", "b", "c", "d"]           |
  
+--------------------------------+
  
1 row in set (0.00 sec)
  * JSON_TYPE(object) 判断并显示数据类型 [ 值非法会报错显示 ]
mysql>  SELECT JSON_TYPE('"lisea"');  
+----------------------+
  
| JSON_TYPE('"lisea"') |
  
+----------------------+
  
| STRING               |
  
+----------------------+
  
1 row in set (0.01 sec)
  

  
mysql> SELECT JSON_TYPE('["a", "b", 1]');
  
+----------------------------+
  
| JSON_TYPE('["a", "b", 1]') |
  
+----------------------------+
  
| ARRAY                      |
  
+----------------------------+
  
1 row in set (0.01 sec)
  

  
mysql> SELECT JSON_TYPE('1');
  
+----------------+
  
| JSON_TYPE('1') |
  
+----------------+
  
| INTEGER        |
  
+----------------+
  
1 row in set (0.00 sec)
  

  
mysql> SELECT JSON_TYPE('{"k1":"v1", "k2":"v2"}');
  
+-------------------------------------+
  
| JSON_TYPE('{"k1":"v1", "k2":"v2"}') |
  
+-------------------------------------+
  
| OBJECT                              |
  
+-------------------------------------+
  
1 row in set (0.00 sec)
  * JSON_MERGE(doc1,doc2....) 合并多个Json对象
mysql> SELECT JSON_MERGE('{"k1":"v1"}','{ "k2":"v2"}');  
+------------------------------------------+
  
| JSON_MERGE('{"k1":"v1"}','{ "k2":"v2"}') |
  
+------------------------------------------+
  
| {"k1": "v1", "k2": "v2"}                 |
  
+------------------------------------------+
  
1 row in set (0.04 sec)
  

  
mysql> SELECT JSON_MERGE('["k1","k2"]','{ "k3":"v3"}');
  
+------------------------------------------+
  
| JSON_MERGE('["k1","k2"]','{ "k3":"v3"}') |
  
+------------------------------------------+
  
| ["k1", "k2", {"k3": "v3"}]               |
  
+------------------------------------------+
  
1 row in set (0.00 sec)
  * JSON_EXTRACT(object, key) 通过Json key方式获取Val值
mysql> SELECT JSON_EXTRACT('{"k1":"v1","k2":"v2"}', '$.k1');  
+-----------------------------------------------+
  
| JSON_EXTRACT('{"k1":"v1","k2":"v2"}', '$.k1') |
  
+-----------------------------------------------+
  
| "v1"                                          |
  
+-----------------------------------------------+
  
1 row in set (0.01 sec)
  

  
mysql> SELECT JSON_EXTRACT('{"k1":"v1","k2":"v2"}', '$.*');
  
+----------------------------------------------+
  
| JSON_EXTRACT('{"k1":"v1","k2":"v2"}', '$.*') |
  
+----------------------------------------------+
  
| ["v1", "v2"]                                 |
  
+----------------------------------------------+
  
1 row in set (0.00 sec)
  * JSON_SET(object, key, val, key, val....) 通过key修改val值
mysql> SELECT JSON_SET('{"k1":"v1","k2":"v2"}', '$.k1', 'lisea', '$.k2', 'hello');  
+---------------------------------------------------------------------+
  
| JSON_SET('{"k1":"v1","k2":"v2"}', '$.k1', 'lisea', '$.k2', 'hello') |
  
+---------------------------------------------------------------------+
  
| {"k1": "lisea", "k2": "hello"}                                      |
  
+---------------------------------------------------------------------+
  
1 row in set (0.00 sec)
  * JSON_INSERT(object, key, val)添加新值到对象中,如果key已存在,不替换val
mysql> SELECT JSON_INSERT('{"k1":"v1","k2":"v2"}', '$.k1', 'hello');  
+-------------------------------------------------------+
  
| JSON_INSERT('{"k1":"v1","k2":"v2"}', '$.k1', 'hello') |
  
+-------------------------------------------------------+
  
| {"k1": "v1", "k2": "v2"}                              |
  
+-------------------------------------------------------+
  
1 row in set (0.03 sec)
  

  
mysql> SELECT JSON_INSERT('{"k1":"v1","k2":"v2"}', '$.k3', 'v3');
  
+----------------------------------------------------+
  
| JSON_INSERT('{"k1":"v1","k2":"v2"}', '$.k3', 'v3') |
  
+----------------------------------------------------+
  
| {"k1": "v1", "k2": "v2", "k3": "v3"}               |
  
+----------------------------------------------------+
  
1 row in set (0.02 sec)
  * JSON_REPLACE() 替换现有的值并忽略新的值
mysql> SELECT JSON_REPLACE('{"k1":"v1","k2":"v2"}', '$.k1', 'hello', '$.k3', 'v3');  
+----------------------------------------------------------------------+
  
| JSON_REPLACE('{"k1":"v1","k2":"v2"}', '$.k1', 'hello', '$.k3', 'v3') |
  
+----------------------------------------------------------------------+
  
| {"k1": "hello", "k2": "v2"}                                          |
  
+----------------------------------------------------------------------+
  
1 row in set (0.01 sec)
  * JSON_REMOVE() 通过key移除
mysql> SELECT JSON_REMOVE('{"k1":"v1","k2":"v2"}', '$.k1');  
+----------------------------------------------+
  
| JSON_REMOVE('{"k1":"v1","k2":"v2"}', '$.k1') |
  
+----------------------------------------------+
  
| {"k2": "v2"}                                 |
  
+----------------------------------------------+
  
1 row in set (0.00 sec)
  * JSON_KEYS() 获取所有key
mysql> SELECT JSON_KEYS('{"k1":"v1","k2":"v2"}');  
+------------------------------------+
  
| JSON_KEYS('{"k1":"v1","k2":"v2"}') |
  
+------------------------------------+
  
| ["k1", "k2"]                       |
  
+------------------------------------+
  
1 row in set (0.03 sec)
  * JSON_UNQUOTE() 去掉值的引号
mysql> SELECT JSON_UNQUOTE('"hello"');  
+-------------------------+
  
| JSON_UNQUOTE('"hello"') |
  
+-------------------------+
  
| hello                   |
  
+-------------------------+
  
1 row in set (0.01 sec)
  * JSON_DEPTH() 获取Json对象的深度
mysql> SELECT JSON_DEPTH('{"k1":"v1","k2":"v2"}');  
+-------------------------------------+
  
| JSON_DEPTH('{"k1":"v1","k2":"v2"}') |
  
+-------------------------------------+
  
|                                   2 |
  
+-------------------------------------+
  
1 row in set (0.00 sec)
  

  
mysql> SELECT JSON_DEPTH('{}');
  
+------------------+
  
| JSON_DEPTH('{}') |
  
+------------------+
  
|                1 |
  
+------------------+
  
1 row in set (0.01 sec)
  * JSON_VALID() 判断是否为有效的json格式
mysql> SELECT JSON_VALID('{"k1":"v1"}');  
+---------------------------+
  
| JSON_VALID('{"k1":"v1"}') |
  
+---------------------------+
  
|                         1 |
  
+---------------------------+
  
1 row in set (0.00 sec)
  

  
mysql> SELECT JSON_VALID('{"k1":"v1"');
  
+--------------------------+
  
| JSON_VALID('{"k1":"v1"') |
  
+--------------------------+
  
|                        0 |
  
+--------------------------+
  
1 row in set (0.00 sec)
  * JSON_LENGTH() 获取指定路径下的长度
  长度的计算规则:
  标量的长度为1
  json array的长度为元素的个数
  json object的长度为key的个数
mysql> SELECT JSON_LENGTH('[1, 2, 3]');  
+--------------------------+
  
| JSON_LENGTH('[1, 2, 3]') |
  
+--------------------------+
  
|                        3 |
  
+--------------------------+
  
1 row in set (0.00 sec)
  

  
mysql> SELECT JSON_LENGTH('{"k1":"v1", "k2":"v2"}');
  
+---------------------------------------+
  
| JSON_LENGTH('{"k1":"v1", "k2":"v2"}') |
  
+---------------------------------------+
  
|                                     2 |
  
+---------------------------------------+
  
1 row in set (0.00 sec)
  * JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])
  查询包含指定字符串的paths,并作为一个json array返回 
  one_or_all:"one"表示查询到一个即返回;"all"表示查询所有。
  search_str:要查询的字符串。 可以用LIKE里的'%'或‘_’匹配。
  path:在指定path下查。
mysql> SELECT JSON_SEARCH('{"k1":"v1", "k2":"v2", "k3":"v2"}', 'one', 'v2%');  
+----------------------------------------------------------------+
  
| JSON_SEARCH('{"k1":"v1", "k2":"v2", "k3":"v2"}', 'one', 'v2%') |
  
+----------------------------------------------------------------+
  
| "$.k2"                                                         |
  
+----------------------------------------------------------------+
  
1 row in set (0.00 sec)
  

  
mysql> SELECT JSON_SEARCH('{"k1":"v1", "k2":"v2", "k3":"v2"}', 'all', 'v2%');
  
+----------------------------------------------------------------+
  
| JSON_SEARCH('{"k1":"v1", "k2":"v2", "k3":"v2"}', 'all', 'v2%') |
  
+----------------------------------------------------------------+
  
| ["$.k2", "$.k3"]                                               |
  
+----------------------------------------------------------------+
  
1 row in set (0.01 sec)
  4. 总结
  以需求驱动技术,技术本身没有优略之分,只有业务之分。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-603117-1-1.html 上篇帖子: PHPWAMP快速自定义Mysql历史版本,吸纳其他集成环境的Mysql数据库 下篇帖子: MYSQL-skip-networking
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表