1. 程式人生 > 實用技巧 >MySQL8.0新特性_01_JSON資料格式的支援

MySQL8.0新特性_01_JSON資料格式的支援

1. JSON語法規則

  • 資料在名稱/值對中
  • 資料由逗號分隔
  • 花括號儲存物件
  • 方括號儲存陣列

JSON 名稱/值對

JSON 資料的書寫格式是:{Key:Value}{Key:Array}

{Key:Value},前面是鍵,中間是英文的“:”(冒號),然後是值。但是注意的是如果是字串,嚴格來說都是英文雙引號引起來的

如:{"Key":"Value"}

  1. {"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"}');  #物件型別使用居多

查詢記錄

-- 查詢記錄
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 有的話就替換,沒有的就不操作。