MySQL 5.7 json介紹前言
MySQL5.7新增兩種欄位類型:Json和Generated,Generated型的產生和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、查詢全部結果
2:JSON_EXTRACT查詢
JSON_EXTRACT這個函數主要用作精確匹配,如查找user_info中age=21的記錄或查詢name='wangnamewei'的記錄,或查找user_info中age=21的記錄或查詢name='wangnamewei'的記錄,或稱為 langnamewei' %wangwei%'模糊查詢:
SELECT * FROM json_test WHERE JSON_EXTRACT(user_info,'$.age')=21;
在值為數組的時候,數組的起始位置值為0,同時,MySQL在5.5.9的版本增加了->,提供了等價於JSON_EXTRACT另外一種寫:
SELECT * FROM json_test WHERE user_info->"$.age"=21;
3、JSON_SEARCH查詢
JSON_SEARCH字串查找函數,查找json所有key中值為'wangwei'的記錄,為精確匹配;的話有點like的意思:
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:
6、JSON_LENGTH長度查詢
JSON_LENGTH是用來計算JSON字段的長度:
7:JSON_DEPTH層級查詢
7:JSON_DEPTH層級查詢層的數字所以正常情況下Json欄位類型不為空,這個值的查詢出的結果應該大於等於2:8:JSON_TYPE查詢Json欄位中key值的資料型別
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 MERockicalo
DATETIME: MySQL DATETIME and TIMESTAMP scalars;DATE: MySQL DATE scalars;TIME: MySQL TIME scalars
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主要是用來去掉前後的特殊字符,格式化值,目前支援一下幾種字符:
就是高上)的內容,更多相關內容請關注PHP中文網(www.php.cn)!