JSON

MySQL 5.7 对JSON的支持(2)

字号+ 作者:H5之家 来源:H5之家 2017-02-08 11:00 我要评论( )

mysql select * from json_test; +-----+-------------------------------------------------------------------+-----------+ | uid | data | user_name | +-----+----------------------------------------------

mysql> select * from json_test;                                                                                                                                                                             +-----+-------------------------------------------------------------------+-----------+

| uid | data                                                              | user_name |

+-----+-------------------------------------------------------------------+-----------+

|   1 | {"name": "name1", "amount": 400, "mobile": "15044447279"}         | "name1"   |

|   2 | {"name": "name1", "amount": 300, "mobile": "15044447279"}         | "name1"   |

|   3 | {"name": "name2", "amount": 300, "mobile": "15044447278"}         | "name2"   |

|   4 | {"name": "name3", "amount": 300, "mobile": "15044447277"}         | "name3"   |

|   5 | {"amount": 300, "mobile": "15044447277"}                          | NULL      |

|   6 | {"amount": "300", "name”:”name2”,”mobile": "15044447278"}         | NULL      |

|   7 | {"name": "name1", "amount": 300, "mobile": "15044447279"}         | "name1"   |

+-----+-------------------------------------------------------------------+-----------+

7 rows in set (0.00 sec)

确认新数据

mysql> rollback;

回滚数据

mysql> select * from json_test;

+-----+-------------------------------------------------------------------+-----------+

| uid | data                                                              | user_name |

+-----+-------------------------------------------------------------------+-----------+

|   1 | {"name": "name1", "amount": 400, "mobile": "15044447279"}         | "name1"   |

|   2 | {"name": "name1", "amount": 300, "mobile": "15044447279"}         | "name1"   |

|   3 | {"name": "name2", "amount": 300, "mobile": "15044447278"}         | "name2"   |

|   4 | {"name": "name3", "amount": 300, "mobile": "15044447277"}         | "name3"   |

|   5 | {"amount": 300, "mobile": "15044447277"}                          | NULL      |

|   6 | {"amount": "300", "name”:”name2”,”mobile": "15044447278"}         | NULL      |

+-----+-------------------------------------------------------------------+-----------+

6 rows in set (0.00 sec)

 

 

对mysql 5.7 好感度*2啊。。卧槽。 

 

猜测一下虚拟列的做法:

 

ALTER TABLE json_test  ADD user_name varchar(128) GENERATED ALWAYS AS (json_extract(data,'$.name')) VIRTUAL;

应该写入的时候做一个trigger 每个json都运算json_extract(data,'$.name') ,然后写到一个新的不可修改的列里。

 

这个就可以让原来的行存文档有一个非常完美的结合,当业务变化大的时候,放到json里面,而当变化稳定下来,就迁移到行存里。

 

完美。 推荐!

[译]JSON数据范式化(normalizr) 

MySQL5.7 JSON类型使用介绍 

本文永久更新链接地址

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • hibernate整合开发例子

    hibernate整合开发例子

    2017-02-08 10:07

  • JSONModel源码阅读笔记

    JSONModel源码阅读笔记

    2017-02-08 09:06

  • ReactNative之package.json文件详解

    ReactNative之package.json文件详解

    2017-02-08 08:01

  • .NetCore Json代替了Xml

    .NetCore Json代替了Xml

    2017-02-07 18:05

网友点评
h