首頁  >  文章  >  資料庫  >  MySQL 5.7新功能| Json Column和Generated Column(上)

MySQL 5.7新功能| Json Column和Generated Column(上)

黄舟
黄舟原創
2017-02-07 13:08:071315瀏覽

MySQL 5.7 json介紹前言

MySQL5.7新增兩種欄位類型:Json和Generated,Gen​​erated型的產生和Json的關係密不可分,如果沒有Generated類型,Json類型在強大,生產中可能也無法使用,因為Json不支援索引,但如果要查詢Json裡的數據,沒有索引就是全表掃描,在執行效率上肯定是不能用於生產環境的,但是有了Generated類型就不同了,Generated類型簡單地說是一個虛擬字段,值是不可更新的,值來源其他字段或者字段間計算或是轉化而來的,這種類型是可以創建索引,利用Generated的特性,就可以間接的給Json類型中的key創建索引,解決Json不能建立索引的問題。簡而言之, Generated類型的產生,為Json類型在索引方面的問題提供了支援。 JSON的值包含單一值、陣列、元組、標註的Json格式等幾種格式。

客觀地說,Json類型的出現,為研發提供了便利,提供了類似NoSQL的支持,但是走DBA運維的角度來看,也許是一個麻煩,這個麻煩和text等大字段的麻煩是一致的,json可能在實際的生產中會成為text字段的變種,望DBA在以後5.7的使用中密切關注這個類型。

建立帶有JSON欄位的表

直接建立一張測試帶JSON欄位的表

CREATE TABLE json_test (
  id int(11) NOT NULL AUTO_INCREMENT,
  group_name varchar(20) DEFAULT NULL,
  user_info json DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

或是在表中新增一個JSON類型的欄位

 ALTER TABLE json_test ADD COLUMN user_info JSON DEFAULT NULL;

插入資料欄位相關

1、查詢全部結果MySQL 5.7新功能| Json Column和Generated Column(上)

2:JSON_EXTRACT查詢

JSON_EXTRACT這個函數主要用作精確匹配,如查找user_info中age=21的記錄或查詢name='wangnamewei'的記錄,或查找user_info中age=21的記錄或查詢name='wangnamewei'的記錄,或稱為 langnamewei' %wangwei%'模糊查詢:MySQL 5.7新功能| Json Column和Generated Column(上)

SELECT * FROM json_test WHERE JSON_EXTRACT(user_info,'$.age')=21;

MySQL 5.7新功能| Json Column和Generated Column(上)在值為數組的時候,數組的起始位置值為0,同時,MySQL在5.5.9的版本增加了->,提供了等價於JSON_EXTRACT另外一種寫:

SELECT * FROM json_test WHERE user_info->"$.age"=21;

MySQL 5.7新功能| Json Column和Generated Column(上)

MySQL 5.7新功能| Json Column和Generated Column(上)3、JSON_SEARCH查詢

JSON_SEARCH字串查找函數,查找json所有key中值為'wangwei'的記錄,為精確匹配;的話有點like的意思:MySQL 5.7新功能| Json Column和Generated Column(上)

SELECT * FROM json_test WHERE JSON_SEARCH(user_info,'all','wangwei') IS NOT NULL;
SELECT * FROM json_test WHERE JSON_SEARCH(user_info,'all','wangwei%') IS NOT NULL;
SELECT * FROM json_test WHERE JSON_SEARCH(user_info,'all','%wangwei%') IS NOT NULL;

4、JSON_CONTAINS判斷key是否包含指定的值

JSON_CONTAINS判斷key是否包含指定的值,傳回值為0或1或null,對應的情況為不包含、包含、和指定的key不存在集中情況:

5、JSON_CONTAINS_PATH判斷key在字段中是否存在

JSON_CONTAINS_PATHATHkey在字段中是否存在,返回值為0、1,格式為JSON_CONTA_docP one_or_all, path[, path] ...),如果為one的時候,代表path中只要有一個在就為1,反之為0;如果為all的話必須全部包含,返回為1,反之為0:MySQL 5.7新功能| Json Column和Generated Column(上)

6、JSON_LENGTH長度查詢

JSON_LENGTH是用來計算JSON字段的長度:MySQL 5.7新功能| Json Column和Generated Column(上)

7:JSON_DEPTH層級查詢

MySQL 5.7新功能| Json Column和Generated Column(上)

7:JSON_DEPTH層級查詢層的數字所以正常情況下Json欄位類型不為空,這個值的查詢出的結果應該大於等於2:

8:JSON_TYPE查詢Json欄位中key值的資料型別MySQL 5.7新功能| Json Column和Generated Column(上)

JSON_TYPE主要用於查詢Json欄位類型中key值的資料型別,顯示的類型依分類如下:

Purely JSON types:

OBJECT: JSON objects;ARRAY: JSON arrays;BOOLEAN: The JSON true and false literals;NULL: The Jull liteLEAN: The J

Numeric types:

INTEGER: MySQL TINYINT, SMALLINT, MEDIUMINT and INT and BIGINT scalars;DOUBLE: MySQL DOUBLE FLOAT scalars;DECIMAL: Myars DECIMAL and MERoc​​kicalo


DATETIME: MySQL DATETIME and TIMESTAMP scalars;DATE: MySQL DATE scalars;TIME: MySQL TIME scalars

String types: MySQL

STRING: MySQL utf8 character type scalars;


Binary types:

BLOB: MySQL binary type scalars;BINARY, VARBINARY, BLOB;BIT: MySQL BIT scalars

骨🜎🜎


9、 JSON_UNQUOTE去掉前後特殊字符

JSON_UNQUOTE主要是用來去掉前後的特殊字符,格式化值,目前支援一下幾種字符:

MySQL 5.7新功能| Json Column和Generated Column(上)

就是高上)的內容,更多相關內容請關注PHP中文網(www.php.cn)!

MySQL 5.7新功能| Json Column和Generated Column(上)

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn