成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 MySQL 8.0 操作 JSON 實踐

數據庫 MySQL
經過漫長的測試,即將整體遷移至Mysql8.0; Mysql8.0 對于Json操作新增/優化了很多相關Json的API操作。

[[429750]]

經過漫長的測試,即將整體遷移至Mysql8.0; Mysql8.0 對于Json操作新增/優化了很多相關Json的API操作。

閱讀了一下官方文檔,雖然絕大多數的JSON操作都是應用層完成,但是會一些Mysql的JSON語法,方便進行debug;選出基礎的, 有價值的部分,供未來參考。

https://dev.mysql.com/doc/refman/8.0/en/json.html https://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html

簡單概述

  • 不允許為null; Json格式定義與LONGBLOB or LONGTEXT類似;它的最大長度是受到max_allowed_packet所控制的;
  • 查看JSON字段所占用空間大小的函數時JSON_STORAGE_SIZE(xxx);
  • 除普通的Json操作,額外支持GeoJSON (基于幾何圖形的針對地理空間數據交換格式)一些相關操作;
  • 對Json欄位支持索引(結合Mysql8.0新特性,函數index);
  • 一個可以支持部分的,原地更新Json Column 的可選優化項加入MySql8.0; 可以使用的函數有JSON_SET(), JSON_REPLACE() ,JSON_REMOVE(); 使用時,有一些約束,但是會有更加的性能。

JSON基礎工具 

  1. //使用JSON_ARRAY方法定義JSON數組; 
  2. SELECT JSON_ARRAY(1, "abc"NULLTRUE, CURTIME()) 
  3. //結果:[1, "abc"nulltrue"11:30:24.000000"]   
  4.  
  5. //JSON_OBJECT 方法定義JSON對象 
  6. SELECT JSON_OBJECT('id', 87, 'name''carrot'
  7. //結果{"id": 87, "name""carrot"
  8.  
  9. //數組 與 對象嵌套的場景; 
  10. [99, {"id""HK500""cost": 75.99}, ["hot""cold"]] {"k1""value""k2": [10, 20]} 
  11.  
  12. //日期/時間類型定義 
  13. ["12:18:29.000000""2015-07-29""2015-07-29 12:18:29.000000"
  14.  
  15.  //JSON_QUOTE 將JSON對象轉義成String, 就是將內部的符  號進行轉義,并整體包裹上雙引號; 
  16. JSON_QUOTE(' "null" '
  17. //結果 "\"null\"" 
  18.  
  19. //將JSON內容美化并輸出; 
  20. JSON_PRETTY() 
  21.  
  22. //可以將JSON/JSON內部的元素轉化為其他數據類型; 
  23. //如下將JSON jdoc 中的id元素,轉化為 unsigned int
  24. [https://dev.mysql.com/doc/refman/8.0/en/json.html#json-converting-between-types]    (https://dev.mysql.com/doc/refman/8.0/en/json.html#json-converting-between-types) 
  25. ORDER BY CAST(JSON_EXTRACT(jdoc, '$.id'AS   UNSIGNED); 

合并JSON的操作 JSON_MERGE_PRESERVE() and JSON_MERGE_PATCH() 實際業務用的可能性很少;-> -->操作符,按照key 找值;區別在于 -->會去除包裹的”以及轉義符號; 它的等價的Function形式是JSON_EXTRACT() 。

  1. // {"mascot""Our mascot is a dolphin named \"Sakila\"."
  2. mysql> SELECT col->"$.mascot" FROM qtest; 
  3. //結果:| "Our mascot is a dolphin named \"Sakila\"." | 
  4. SELECT sentence->>"$.mascot" FROM facts; 
  5. // 結果: | Our mascot is a dolphin named "Sakila". | 

JSON Path expression上面 --> 后雙引號中的內容就是所謂的JSON Path expression; 該語法是ECMAScript規范的一部分,所以前端程序員應該特別熟悉。

以下面這段JSON為例: 

  1. [3, {"a": [5, 6], "b": 10}, [99, 100]] 
  2. $[0] = 3 ; 
  3. $[1] = {"a": [5, 6], "b": 10}; 
  4. $[2] = [99, 100]; 

與此同時,[2] 并非標量, 進一步。 

  1. $[1].a = [5,6] 
  2. $[1].a[1] = 6 
  3. $[1].b = 10; 
  4. $[2][0] = 99; 

更進一步支持的語法特性$[n to m]

$[ 1 to 2] = [{"a": [5, 6], "b": 10}, [99, 100]] $[last-2 to last-1] = [3, {"a": [5, 6], "b": 10}]

總結一下;a .是代表所有的members in object; b []是代表所有的cells in array; c [prefix] ** suffix 是代表以prefix開始,以suffix為結束的所有路徑;另外,MySQL 系列面試題和答案全部整理好了,微信搜索互聯網架構師,在后臺發送:2T,可以在線閱讀。

查找并修改JSON 

  1. //如上, 應該可以用-->語法取代; 
  2. mysql> SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": [3, 4, 5]}''$.*'); 
  3. //[1, 2, [3, 4, 5]]   
  4. SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": [3, 4, 5]}''$.c[*]'
  5. //[3, 4, 5] 
  6. SELECT JSON_EXTRACT('{"a": {"b": 1}, "c": {"b": 2}}''$**.b'); 
  7. //[1, 2] 
  8. SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]''$[1 to 3]'); 
  9. //[2, 3, 4] 
  10.  
  11. //JSON_SET JSON_INSERT JSON_REPLACE JSON_REMOVE 
  12. SET @j = '["a", {"b": [true, false]}, [10, 20]]'
  13. SELECT JSON_SET(@j, '$[1].b[0]', 1, '$[2][2]', 2); 
  14. //| ["a", {"b": [1, false]}, [10, 20, 2]]     
  15.  
  16. SELECT JSON_INSERT(@j, '$[1].b[0]', 1, '$[2][2]', 2); 
  17. //["a", {"b": [truefalse]}, [10, 20, 2]] 
  18.  
  19. JSON_REPLACE(@j, '$[1].b[0]', 1, '$[2][2]', 2) 
  20. //["a", {"b": [1, false]}, [10, 20]] 
  21.  
  22. SELECT JSON_REMOVE(@j, '$[2]''$[1].b[1]''$[1].b[1]'); 
  23. //["a", {"b": [true]}] 

JSON Table Functions 一個比較常見的場景是JSON數據本身是一個表的結構;JSON_TABLE(*expr*, *path* COLUMNS (*column_list*) [AS\] *alias*)。 

  1. SELECT *  FROM JSON_TABLE(   '[{"a":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]'
  2.   ->     "$[*]" 
  3.   ->     COLUMNS( 
  4.   ->       rowid FOR ORDINALITY, 
  5.   ->       ac VARCHAR(100) PATH "$.a" DEFAULT '111' ON EMPTY DEFAULT '999' ON ERROR, 
  6.   ->       aj JSON PATH "$.a" DEFAULT '{"x": 333}' ON EMPTY, 
  7.   ->       bx INT EXISTS PATH "$.b" 
  8.   ->     ) 
  9.   ->   ) AS tt; 
  • Comparison and Ordering of JSON Values目前沒感覺倒價值;
  • Aggregation of JSON Values目前沒感覺倒價值; 將返回值轉成其他類型就可以使用聚合函數。

 

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2021-06-03 19:13:06

MySQLJson數據

2010-09-06 14:42:43

2021-10-26 10:51:30

GoxormMySQL

2011-12-26 16:33:02

WCF

2018-05-03 10:33:14

數據庫MySQL 8.0角色管理

2022-09-20 10:44:06

MySQL 8.0數據庫DDL

2012-10-15 13:38:50

IBMdw

2009-12-01 10:12:39

FreeBSD 8.0操作系統

2017-11-16 09:03:56

數據庫MySQLJSON

2023-10-25 14:51:38

MySQL數據庫JSON

2024-02-26 07:39:16

2018-09-19 16:15:18

MySQL直方圖數據庫

2020-09-25 17:10:13

LinuxMySQL 8.0

2022-10-10 08:01:08

MySQL字典表

2021-01-27 09:19:44

MySQL數據優化器

2009-06-04 15:59:53

Netbeans操作MMySQL數據庫

2009-08-18 18:06:54

C#操作符重載

2020-12-31 05:35:53

MySQL 8.0MySQL 5.7JSON

2023-03-04 20:50:19

MySQL字典InnoDB

2025-04-07 03:00:00

MySQLDDLonline
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品成人久久久久 | 99久久久久久99国产精品免 | 国产最新网址 | 欧美激情一区二区三区 | 亚洲男女视频在线观看 | 免费观看一区二区三区毛片 | av中文网 | 国产网站久久 | 瑟瑟视频在线看 | 四色永久 | 亚洲一区| 自拍偷拍精品 | 久久精品av| 男女污污网站 | 成人性生交大片 | 亚洲一区二区视频在线观看 | 国产精品毛片 | 黄色欧美| 久久精品国产一区二区三区 | 国产激情偷乱视频一区二区三区 | 精品视频一区二区三区 | 五月婷婷在线视频 | 日韩成人一区二区 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 伊人久麻豆社区 | 在线只有精品 | 91精品国产91久久综合桃花 | 亚洲一二三区不卡 | 国产一区二区精品在线 | 久草资源在线 | 久久9视频 | 欧美一级久久 | 在线观看av不卡 | 国产一区二区免费 | 国产免费视频 | 国产线视频精品免费观看视频 | 国产在线精品一区二区 | 中文字幕欧美一区 | 一区二区三区国产 | 欧美一区二区免费 | 国产在线不卡 |