zoukankan      html  css  js  c++  java
  • MySQL8.0新特性_01_JSON数据格式的支持

    1. JSON语法规则

    • 数据在名称/值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

    JSON 名称/值对

    JSON 数据的书写格式是:{Key:Value}{Key:Array}

    {Key:Value},前面是键,中间是英文的“:”(冒号),然后是值。但是注意的是如果是字符串,严格来说都是英文双引号引起来的。

    如:{"Key":"Value"}

    {"name" : "鹿晗"}   等价于  name = "鹿晗"
    

    JSON 值范围

    • 数字 (整数或浮点数)
    • 字符串(在双引号中)
    • 逻辑值(truefalse
    • 数组 (在方括号[]中)
    • 对象 (在花括号{}中)
    • null

    JSON 对象

    JSON 对象在花括号中,对象可以包含多个名称/值对,如下代码所示:

    {
        "name": "鹿晗",
        "age": 26,
        "birthday": "1990年4月20日",
    }
    

    这一点也容易理解,与这条 JavaScript 语句等价:

    name = "鹿晗";
    age = 26;
    birthday = "1990年4月20日";
    

    JSON 数组

    JSON数组在方括号("[]")中书写,数组可包含多个对象,如下“star_male”描述

    {
        "star_male": [
            {
                "name": "鹿晗",
                "age": "26"
            },
            {
                "nickname": "李易峰",
                "age": "29"
            },
            {
                "nickname": "陈赫",
                "lastName": "31"
            }
        ]
    }
    

    在上面的例子中,对象 "star_male" 是包含三个对象的数组。每个对象代表一条关于一个明星(姓名和年龄)的记录。

    2.JSON基础函数应用:增、删、改、查

    创建json的表

    use test;
    CREATE TABLE t_json(id INT PRIMARY KEY, sname VARCHAR(20) , info  JSON);
    desc t_json;
    

    插入记录

    -- 插入含有json数组的记录  数组格式
    INSERT INTO t_json(id,sname,info) VALUES( 1, 'name1', JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()));    # CURTIME() 时间函数 20:24:23.000000
    
    -- 插入含有json对象的记录  使用最多的。
    INSERT INTO t_json(id,sname,info) VALUES( 2, 'name2', JSON_OBJECT("age", 20, "time", now()));    # now()时间函数的值 2020-11-22 20:26:06.000000
    INSERT INTO t_json(id,sname,info) VALUES( 3, 'name3', '{"age":20, "time":"2020-11-22 20:34:00"}');  #对象类型使用居多
    

    查询记录

    -- 查询全部的数据
    mysql> select * from t_json;
    +----+-------+---------------------------------------------------+
    | id | sname | info                                              |
    +----+-------+---------------------------------------------------+
    |  1 | name1 | [1, "abc", null, true, "20:24:23.000000"]         |
    |  2 | name2 | {"age": 20, "time": "2020-11-22 20:26:06.000000"} |
    |  3 | name3 | {"age": 20, "time": "2020-11-22 20:34:00"}        |
    +----+-------+---------------------------------------------------+
    3 rows in set (0.01 sec)
    
    -- 查询记录
    SELECT sname,JSON_EXTRACT(info,'$.age') FROM t_json;   # 使用函数居多
    
    SELECT sname,info->'$.age' FROM t_json;
    -- 查询key
    SELECT id,json_keys(info) FROM t_json;
    

    修改记录

    -- 增加键
    UPDATE t_json SET info = json_set(info,'$.ip','192.168.1.1') WHERE id = 2;
    -- 变更值
    UPDATE t_json SET info = json_set(info,'$.ip','192.168.1.2') WHERE id = 2;   
    -- 删除键
    UPDATE t_json SET info = json_remove(info,'$.ip') WHERE id = 2;
    
    # 说明:
    正常的mysql的语句 UPDATE t_json SET info = 
    json_set     说明的是  当info字段中没有ip这列的时候,增加一列值 ,如果有列和值的话,修改这列的值。 条件为2的行数
    json_remove  说明的是  删除ip这列和值。 条件为2的行数
    
    和set 相关的还有一个 json_replace 有的话就替换,没有的就不操作。
    
  • 相关阅读:
    Visual Studio 2013 的 Xamarin 安装教程
    BeesCMS后台登录SQL报错注入
    Linux系统更改IP地址
    SSRF漏洞
    代码执行漏洞
    Python零碎的知识(持续更新)
    iptables
    WAF学习_(2)安装
    WAF学习_(1)Lua基础
    SSL协议
  • 原文地址:https://www.cnblogs.com/liych/p/14021474.html
Copyright © 2011-2022 走看看