MySQL 5.7新特性| Json Column和Generated Column(中)

第一標題

1、JSON_ARRAY_append數組類的追加

這個用法主要是處理JSON字段中值數組型的數據,主要是追加值,不是標準數組類型的,這個函數會自動轉化為數組形式,把之前的值作為數組的第一個元素然后進行追加,有批量追加方法:

mysql>?SET?@j?=?'["a",?["b",?"c"],?"d"]';

在字段中第二個數值的數組中追加一個元素1:

mysql>?SELECT?JSON_ARRAY_APPEND(@j,?'$[1]',?1);  +----------------------------------+  |?JSON_ARRAY_APPEND(@j,?'$[1]',?1)?|  +----------------------------------+  |?["a",?["b",?"c",?1],?"d"]?????????|  +----------------------------------+

在字段中第一個數值的數組中追加一個元素2,如果不是數組形式的單個值會改變其為數組并追加:

mysql>?SELECT?JSON_ARRAY_APPEND(@j,?'$[0]',?2);  +----------------------------------+  |?JSON_ARRAY_APPEND(@j,?'$[0]',?2)?|  +----------------------------------+  |?[["a",?2],?["b",?"c"],?"d"]??????|  +----------------------------------+

在字段中第二個數值的第一個數組中追加一個元素3,如果不是數組形式的單個值會改變其為數組并追加:

mysql>?SELECT?JSON_ARRAY_APPEND(@j,?'$[1][0]',?3);  +-------------------------------------+  |?JSON_ARRAY_APPEND(@j,?'$[1][0]',?3)?|  +-------------------------------------+  |?["a",?[["b",?3],?"c"],?"d"]?????????|  +-------------------------------------+

在字段中key為”b”的value數組中追加一個元素”x”:

mysql>?SET?@j?=?'{"a":?1,?"b":?[2,?3],?"c":?4}';  mysql>?SELECT?JSON_ARRAY_APPEND(@j,?'$.b',?'x');  +------------------------------------+  |?JSON_ARRAY_APPEND(@j,?'$.b',?'x')??|  +------------------------------------+  |?{"a":?1,?"b":?[2,?3,?"x"],?"c":?4}?|  +------------------------------------+

?
?
?
?
在字段中key為”c”的value數組中追加一個元素”y”:

mysql>?SELECT?JSON_ARRAY_APPEND(@j,?'$.c',?'y');  +--------------------------------------+  |?JSON_ARRAY_APPEND(@j,?'$.c',?'y')????|  +--------------------------------------+  |?{"a":?1,?"b":?[2,?3],?"c":?[4,?"y"]}?|  +--------------------------------------+

如果JSON字段為標準的JSON類型,使用這個函數則會把其變化數組形式,并追加值:

mysql>?SET?@j?=?'{"a":?1}';  mysql>?SELECT?JSON_ARRAY_APPEND(@j,?'$',?'z');  +---------------------------------+  |?JSON_ARRAY_APPEND(@j,?'$',?'z')?|  +---------------------------------+  |?[{"a":?1},?"z"]????????????????????|  +---------------------------------+

如果JSON字段為標準的JSON類型,批量追加:

mysql>?SELECT?JSON_ARRAY_APPEND(@j,?'$',?'z','$',?'w');  +---------------------------------+  |?JSON_ARRAY_APPEND(@j,?'$',?'z')?|  +---------------------------------+  |?[{"a":?1},?"z",?"w"]??????????????|  +---------------------------------+

2、JSON_ARRAY_INSERT數組類的插入

這個用法主要是處理JSON字段中值數組型的數據,主要是插入,不是標準數組類型的,這個函數會自動轉化為數組形式,把之前的值作為數組的第一個元素然后進行追加:

mysql>?SET?@j?=?'["a",?{"b":?[1,?2]},?[3,?4]]';

在數組第1個值后面插入字符’x’ 元素:

mysql>?SELECT?JSON_ARRAY_INSERT(@j,?'$[1]',?'x');  +------------------------------------+  |?JSON_ARRAY_INSERT(@j,?'$[1]',?'x')?|  +------------------------------------+  |?["a",?"x",?{"b":?[1,?2]},?[3,?4]]??|

在數組第1個值前面插入字符’x’ 元素:

mysql>?SELECT?JSON_ARRAY_INSERT(@j,?'$[0]',?'x');  +------------------------------------+  |?JSON_ARRAY_INSERT(@j,?'$[1]',?'x')?|  +------------------------------------+  |?["x","a",?{"b":?[1,?2]},?[3,?4]]??|  +------------------------------------+

?
?
?
在數組第100個值后面插入字符’x’ 元素,如果超長,則在最后一個值后面插入:

mysql>?SELECT?JSON_ARRAY_INSERT(@j,?'$[100]',?'x');  +--------------------------------------+  |?JSON_ARRAY_INSERT(@j,?'$[100]',?'x')?|  +--------------------------------------+  |?["a",?{"b":?[1,?2]},?[3,?4],?"x"]????|  +--------------------------------------+

在數組第1個值中key為’b’的value數組第1個值前面入字符元素’x’:

mysql>?SELECT?JSON_ARRAY_INSERT(@j,?'$[1].b[0]',?'x');  +-----------------------------------------+  |?JSON_ARRAY_INSERT(@j,?'$[1].b[0]',?'x')?|  +-----------------------------------------+  |?["a",?{"b":?["x",?1,?2]},?[3,?4]]???????|  +-----------------------------------------+

在數組第2個值后面數組第1個值后面入字符元素’y’:

mysql>?SELECT?JSON_ARRAY_INSERT(@j,?'$[2][1]',?'y');  +---------------------------------------+  |?JSON_ARRAY_INSERT(@j,?'$[2][1]',?'y')?|  +---------------------------------------+  |?["a",?{"b":?[1,?2]},?[3,?"y",?4]]?????|  +---------------------------------------+

數組元素的批量插入:

mysql>?SELECT?JSON_ARRAY_INSERT(@j,?'$[0]',?'x',?'$[2][1]',?'y');  +----------------------------------------------------+  |?JSON_ARRAY_INSERT(@j,?'$[0]',?'x',?'$[2][1]',?'y')?|  +----------------------------------------------------+  |?["x",?"a",?{"b":?[1,?2]},?[3,?4]]??????????????????????|  +----------------------------------------------------+

3、JSON_INSERT標準JSON值的插入

如果這個key已經存在,則不會去覆蓋舊值,不存在的插入:

mysql>?SET?@j?=?'{?"a":?1,?"b":?[2,?3]}';  mysql>?SELECT?JSON_INSERT(@j,?'$.a',?10,?'$.c',?'[true,?false]');  +----------------------------------------------------+  |?JSON_INSERT(@j,?'$.a',?10,?'$.c',?'[true,?false]')?|  +----------------------------------------------------+  |?{"a":?1,?"b":?[2,?3],?"c":?"[true,?false]"}??????????|  +----------------------------------------------------+

4、JSON_MERGE合并操作

JSON_MERGE這個主要用于合并:如果兩個是數組的,則合并為一個數組;如果兩個是JSON的,則合并為一個JSON,如果兩個JSON有相同的key,則value合并為數組;如果是兩個單值的,則合并為一個數組;如果是一個數組,一個是JSON,則合并為一個數組:

mysql>?SELECT?JSON_MERGE('[1,?2]',?'[true,?false]');  +---------------------------------------+  |?JSON_MERGE('[1,?2]',?'[true,?false]')?|  +---------------------------------------+  |?[1,?2,?true,?false]???????????????????????|  +---------------------------------------+  mysql>?SELECT?JSON_MERGE('{"name":?"x"}',?'{"id":?47}');  +-------------------------------------------+  |?JSON_MERGE('{"name":?"x"}',?'{"id":?47}')?|  +-------------------------------------------+  |?{"id":?47,?"name":?"x"}???????????????????????|  +-------------------------------------------+  mysql>?SELECT?JSON_MERGE('{"id":?"x"}',?'{"id":?47}');  +-------------------------------------------+  |?JSON_MERGE('{"id":?"x"}',?'{"id":?47}')?|  +-------------------------------------------+  |?{"id":?["x",47]}?????????????????????????????|  +-------------------------------------------+  mysql>?SELECT?JSON_MERGE('1',?'true');  +-------------------------+  |?JSON_MERGE('1',?'true')?|  +-------------------------+  |?[1,?true]??????????????????|  +-------------------------+  mysql>?SELECT?JSON_MERGE('[1,?2]',?'{"id":?47}');  +------------------------------------+  |?JSON_MERGE('[1,?2]',?'{"id":?47}')?|  +------------------------------------+  |?[1,?2,?{"id":?47}]????????????????????|  +------------------------------------+

5、JSON_REMOVE刪除操作

JSON_REMOVE刪除操作,這個比較簡單,刪除字段中某個值,數組的或是JSON格式的都可以:

mysql>?SET?@j?=?'["a",?["b",?"c"],?"d"]';  mysql>?SELECT?JSON_REMOVE(@j,?'$[1]');  +-------------------------+  |?JSON_REMOVE(@j,?'$[1]')?|  +-------------------------+  |?["a",?"d"]?????????????????|  +-------------------------+  ?  ?  ?  ?  mysql>?SET?@j?=?'{"name":?"x","id":?47}';  mysql>?SELECT?JSON_REMOVE(@j,?'$.id');  +-------------------------+  |?JSON_REMOVE(@j,?'$.id')?|  +-------------------------+  |?{"name":?"x"}??????????????|  +-------------------------+  mysql>?SELECT?JSON_REMOVE(@j,?'$.id',?'$.name');  +-----------------------------------+  |?JSON_REMOVE(@j,?'$.id',?'$.name')?|  +-----------------------------------+  |?{}???????????????????????????????????????|  +-----------------------------------+  mysql>?SET?@j?=?'{"name":?"x","id":?[47,48]}';  mysql>?SELECT?JSON_REMOVE(@j,?'$.id[1]');  +-------------------------+  |?JSON_REMOVE(@j,?'$.id')?|  +-------------------------+  |?{"id":?[47],"name":?"x"}?|  +-------------------------+

6、JSON_REPLACE操作

JSON_REPLACE替換操作,有則替換,無則忽略。

mysql>?SET?@j?=?'{?"a":?1,?"b":?[2,?3]}';  mysql>?SELECT?JSON_REPLACE(@j,?'$.a',?10,?'$.c',?'[true,?false]');  +-----------------------------------------------------+  |?JSON_REPLACE(@j,?'$.a',?10,?'$.c',?'[true,?false]')?|  +-----------------------------------------------------+  |?{"a":?10,?"b":?[2,?3]}??????????????????????????????????????  +-----------------------------------------------------+  mysql>?SELECT?JSON_REPLACE(@j,?'$.a',?10,?'$.b[1]',99);  +-----------------------------------------------------+  |?JSON_REPLACE(@j,?'$.a',?10,?'$.b[1]',99')???????????|  +-----------------------------------------------------+  |?{"a":?10,?"b":?[2,?99]}?????????????????????????????|  +-----------------------------------------------------+

7、JSON_SET操作

JSON_SET操作為更新和插入操作,已經存在的去更新;不存在則插入,以下是JSON_SET、JSON_INSERT、JSON_REPLACE執行結果的區別:

MySQL 5.7新特性| Json Column和Generated Column(中)

以上就是MySQL 5.7新特性| Json Column和Generated Column(中)的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享