MySQL8.0新特性_01_JSON資料格式的支援
阿新 • • 發佈:2020-11-22
1. JSON語法規則
- 資料在名稱/值對中
- 資料由逗號分隔
- 花括號儲存物件
- 方括號儲存陣列
JSON 名稱/值對
JSON 資料的書寫格式是:{Key:Value}
、{Key:Array}
。
{Key:Value}
,前面是鍵,中間是英文的“:”(冒號),然後是值。但是注意的是如果是字串,嚴格來說都是英文雙引號引起來的
如:{"Key":"Value"}
- {"name" : "鹿晗"} 等價於 name = "鹿晗"
JSON 值範圍
- 數字 (整數或浮點數)
- 字串(在雙引號中)
- 邏輯值(
true
或false
) - 陣列 (在方括號[]中)
- 物件 (在花括號{}中)
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 有的話就替換,沒有的就不操作。