欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中json字段的操作方法

 更新時(shí)間:2020年11月06日 09:56:00   作者:AsiaYe  
這篇文章主要介紹了MySQL中json字段的操作方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下

   MySQL5.7.8中引入了json字段,這種類型的字段使用的頻率比較低,但是在實(shí)際操作中,有些業(yè)務(wù)仍然在用,我們以此為例,介紹下json字段的操作方法:

還是從例子看起:

mysql> create table test1(id int,info json);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into test1 values (1,'{"name":"yeyz","age":26}'),(2,'{"name":"zhangsan","age":30}'),(3,'{"name":"lisi","age":35}');
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from test1;
+------+---------------------------------+
| id  | info              |
+------+---------------------------------+
|  1 | {"age": 26, "name": "yeyz"}   |
|  2 | {"age": 30, "name": "zhangsan"} |
|  3 | {"age": 35, "name": "lisi"}   |
+------+---------------------------------+
3 rows in set (0.00 sec)

    首先我們創(chuàng)建了一個(gè)表test1,其中id是int字段,info是json字段,插入了三條數(shù)據(jù),如上:

mysql> select * from test1 where json_extract(info,"$.age")>=30;
+------+---------------------------------+
| id  | info              |
+------+---------------------------------+
|  2 | {"age": 30, "name": "zhangsan"} |
|  3 | {"age": 35, "name": "lisi"}   |
+------+---------------------------------+
2 rows in set (0.00 sec)

   我們可以通過(guò)json_extract的方法得到j(luò)son中的內(nèi)容。其中:

1、$符號(hào)代表的是json的根目錄,

2、我們使用$.age相當(dāng)于取出來(lái)了json中的age字段,

3、當(dāng)然,在函數(shù)最前面,應(yīng)該寫上字段名字info

下面來(lái)看json中常用的函數(shù):

a、json_valid判斷是否是json字段,如果是,返回1,如果不是,返回0

mysql> select json_valid(2);
+---------------+
| json_valid(2) |
+---------------+
|       0 |
+---------------+
1 row in set (0.01 sec)
mysql> select json_valid('{"num":2}');
+-------------------------+
| json_valid('{"num":2}') |
+-------------------------+
|            1 |
+-------------------------+
1 row in set (0.00 sec)

mysql> select json_valid('2');
+-----------------+
| json_valid('2') |
+-----------------+
|        1 |
+-----------------+
1 row in set (0.00 sec)
mysql> select json_valid('name');
+--------------------+
| json_valid('name') |
+--------------------+
|         0 |
+--------------------+
1 row in set (0.00 sec)

   這里需要注意的是,如果傳入了字符串2,那么,返回結(jié)果是1

b、json_keys傳回執(zhí)行json字段最上一層的key值

mysql> select json_keys('{"name":"yeyz","score":100}');
+------------------------------------------+
| json_keys('{"name":"yeyz","score":100}') |
+------------------------------------------+
| ["name", "score"]            |
+------------------------------------------+
1 row in set (0.01 sec)
mysql> select json_keys('{"name":"yeyz","score":{"math":100,"English":95}}');
+----------------------------------------------------------------+
| json_keys('{"name":"yeyz","score":{"math":100,"English":95}}') |
+----------------------------------------------------------------+
| ["name", "score"]                       |
+----------------------------------------------------------------+
1 row in set (0.00 sec)
#如果有多層,可以在最后面使用$的方法,拿到其中的某一層的目錄
mysql> select json_keys('{"name":"yeyz","score":{"math":100,"English":95}}','$.score');
+--------------------------------------------------------------------------+
| json_keys('{"name":"yeyz","score":{"math":100,"English":95}}','$.score') |
+--------------------------------------------------------------------------+
| ["math", "English"]                           |
+--------------------------------------------------------------------------+
1 row in set (0.00 sec)

c、json_length函數(shù),返回最上一層的key個(gè)數(shù),如果想取到中間的某一層,則可以使用$的方法,如下:

mysql> select json_length('{"name":"yeyz","score":{"math":100,"English":95},"age":26}');
+---------------------------------------------------------------------------+
| json_length('{"name":"yeyz","score":{"math":100,"English":95},"age":26}') |
+---------------------------------------------------------------------------+
|                                     3 |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select json_length('{"name":"yeyz","score":{"math":100,"English":95},"age":26}','$.score');
+-------------------------------------------------------------------------------------+
| json_length('{"name":"yeyz","score":{"math":100,"English":95},"age":26}','$.score') |
+-------------------------------------------------------------------------------------+
|                                          2 |
+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

d、json_depth函數(shù),json文件的深度,測(cè)試?yán)尤缦拢?/p>

mysql> select json_depth('{"aaa":1}'),json_depth('{}');
+-------------------------+------------------+
| json_depth('{"aaa":1}') | json_depth('{}') |
+-------------------------+------------------+
|            2 |        1 |
+-------------------------+------------------+
1 row in set (0.00 sec)

mysql> select json_depth('{"name":"yeyz","score":{"math":100,"English":95},"age":26}');
+--------------------------------------------------------------------------+
| json_depth('{"name":"yeyz","score":{"math":100,"English":95},"age":26}') |
+--------------------------------------------------------------------------+
|                                    3 |
+--------------------------------------------------------------------------+
1 row in set (0.00 sec)

   這里需要注意的是,形如{'aa':1}這種形式的json,其深度是2

e、json_contains_path函數(shù)檢索json中是否有一個(gè)或者多個(gè)成員。

mysql> set @j='{"a":1,"b":2,"c":{"d":4}}';
Query OK, 0 rows affected (0.00 sec)
#one的意思是只要包含一個(gè)成員,就返回1
mysql> select json_contains_path(@j,'one','$.a','$.e');
+------------------------------------------+
| json_contains_path(@j,'one','$.a','$.e') |
+------------------------------------------+
|                    1 |
+------------------------------------------+
1 row in set (0.00 sec)
#all的意思是所有的成員都包含,才返回1
mysql> select json_contains_path(@j,'all','$.a','$.e');
+------------------------------------------+
| json_contains_path(@j,'all','$.a','$.e') |
+------------------------------------------+
|                    0 |
+------------------------------------------+
1 row in set (0.01 sec)

mysql> select json_contains_path(@j,'one','$.c.d');
+--------------------------------------+
| json_contains_path(@j,'one','$.c.d') |
+--------------------------------------+
|                  1 |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> select json_contains_path(@j,'one','$.a.d');
+--------------------------------------+
| json_contains_path(@j,'one','$.a.d') |
+--------------------------------------+
|                  0 |
+--------------------------------------+
1 row in set (0.00 sec)

f、json_type函數(shù),判斷json中的成員的類型,需要和json_extract結(jié)合起來(lái)使用。

mysql> select * from test1;
+------+---------------------------------+
| id  | info              |
+------+---------------------------------+
|  1 | {"age": 26, "name": "yeyz"}   |
|  2 | {"age": 30, "name": "zhangsan"} |
|  3 | {"age": 35, "name": "lisi"}   |
+------+---------------------------------+
3 rows in set (0.00 sec)
#判斷name的類型
mysql> select json_type(json_extract(info,"$.name")) from test1;
+----------------------------------------+
| json_type(json_extract(info,"$.name")) |
+----------------------------------------+
| STRING                 |
| STRING                 |
| STRING                 |
+----------------------------------------+
3 rows in set (0.00 sec)
#判斷age的類型
mysql> select json_type(json_extract(info,"$.age")) from test1;
+---------------------------------------+
| json_type(json_extract(info,"$.age")) |
+---------------------------------------+
| INTEGER                |
| INTEGER                |
| INTEGER                |
+---------------------------------------+
3 rows in set (0.00 sec)
#判斷name和age組合起來(lái)的類型,可以看到是array
mysql> select json_type(json_extract(info,"$.name","$.age")) from test1;
+------------------------------------------------+
| json_type(json_extract(info,"$.name","$.age")) |
+------------------------------------------------+
| ARRAY                     |
| ARRAY                     |
| ARRAY                     |
+------------------------------------------------+
3 rows in set (0.00 sec)

g、*的作用,所有的值,看下面的例子。

{
 "a":1,
 "b":2,
 "c":
   {
    "d":4
   }
 "e":
   {
   "d":
     {
     "ddd":
     "5"
     }
   }
}
mysql> set @j='{"a":1,"b":2,"c":{"d":4},"e":{"d":{"ddd":"5"}}}';
Query OK, 0 rows affected (0.00 sec)
#所有成員
mysql> select json_extract(@j,'$.*');
+---------------------------------------+
| json_extract(@j,'$.*')        |
+---------------------------------------+
| [1, 2, {"d": 4}, {"d": {"ddd": "5"}}] |
+---------------------------------------+
1 row in set (0.00 sec)
#所有成員中的d成員
mysql> select json_extract(@j,'$.*.d');
+--------------------------+
| json_extract(@j,'$.*.d') |
+--------------------------+
| [4, {"ddd": "5"}]    |
+--------------------------+
1 row in set (0.00 sec)

以上就是MySQL中json字段的操作方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL json字段的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL查詢性能優(yōu)化武器之鏈路追蹤

    MySQL查詢性能優(yōu)化武器之鏈路追蹤

    這篇文章主要介紹了MySQL查詢性能優(yōu)化武器之鏈路追蹤,optimizer?trace優(yōu)化器追蹤,可以幫助我們查看優(yōu)化器生成執(zhí)行計(jì)劃的整個(gè)過(guò)程,以及做出的各種決策,包括訪問(wèn)表的方法、各種開(kāi)銷計(jì)算、各種轉(zhuǎn)換等
    2022-08-08
  • phpmyadmin報(bào)錯(cuò):#2003 無(wú)法登錄 MySQL服務(wù)器的解決方法

    phpmyadmin報(bào)錯(cuò):#2003 無(wú)法登錄 MySQL服務(wù)器的解決方法

    通過(guò)phpmyadmin連接mysql數(shù)據(jù)庫(kù)時(shí)提示:“2003 無(wú)法登錄 MySQL服務(wù)器”。。。很明顯這是沒(méi)有啟動(dòng)mysql服務(wù),右擊我的電腦-管理-找到服務(wù),找到mysql啟動(dòng)一下
    2012-04-04
  • 使用MySQL的yum源安裝MySQL5.7數(shù)據(jù)庫(kù)的方法

    使用MySQL的yum源安裝MySQL5.7數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了使用MySQL的yum源安裝MySQL5.7數(shù)據(jù)庫(kù)的方法的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • JDBC連接MySQL5.7的方法

    JDBC連接MySQL5.7的方法

    這篇文章主要介紹了JDBC連接MySQL5.7的方法,需要的朋友可以參考下
    2018-05-05
  • vue?axios二次封裝的詳細(xì)解析

    vue?axios二次封裝的詳細(xì)解析

    這篇文章主要介紹了vue?axios二次封裝的詳細(xì)解析,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Mysql systemctl start mysqld報(bào)錯(cuò)的問(wèn)題解決

    Mysql systemctl start mysqld報(bào)錯(cuò)的問(wèn)題解決

    最近運(yùn)行Mysql發(fā)現(xiàn)報(bào)錯(cuò),本文就來(lái)介紹一下Mysql systemctl start mysqld報(bào)錯(cuò)的問(wèn)題解決,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • MySQL分庫(kù)分表總結(jié)講解

    MySQL分庫(kù)分表總結(jié)講解

    今天小編就為大家分享一篇關(guān)于MySQL分庫(kù)分表總結(jié)講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • MySQL數(shù)據(jù)庫(kù)表分區(qū)注意事項(xiàng)大全【推薦】

    MySQL數(shù)據(jù)庫(kù)表分區(qū)注意事項(xiàng)大全【推薦】

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)表分區(qū)注意事項(xiàng)相關(guān)內(nèi)容,比較全面,這里分享給大家,需要的朋友可以參考。
    2017-10-10
  • MySQL做讀寫分離提高性能緩解數(shù)據(jù)庫(kù)壓力

    MySQL做讀寫分離提高性能緩解數(shù)據(jù)庫(kù)壓力

    這篇文章主要為大家介紹了MySQL做讀寫分離提高性能緩解數(shù)據(jù)庫(kù)壓力的技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 關(guān)于MySQL的存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù)

    關(guān)于MySQL的存儲(chǔ)過(guò)程與存儲(chǔ)函數(shù)

    存儲(chǔ)過(guò)程是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL?語(yǔ)句集(這些SQL語(yǔ)句已經(jīng)編譯過(guò)了),它存儲(chǔ)在數(shù)據(jù)庫(kù)中,一次編譯后永久有效,需要的朋友可以參考下
    2023-05-05

最新評(píng)論