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;
插入數據
JSON字段相關查詢
1、查詢全部結果
2:JSON_EXTRACT查詢
JSON_EXTRACT這個函數主要用作精確匹配,如查找user_info中age=21的記錄或者查詢name=’wangwei’的記錄,或者name like ‘%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_PATH判斷key在字段中是否存在,返回值為0和1,格式為JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] …),如果為one的時候,代表path中只要有一個在就為1,反之為0;如果為all的話必須全部包含,返回為1,反之為0:
6、JSON_LENGTH長度查詢
JSON_LENGTH是用來計算JSON字段的長度:
7:JSON_DEPTH層級查詢
JSON_DEPTH這個主要是用來查詢Json字段的層級,空的為1,所以正常情況下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 JSON null literal
Numeric types:
INTEGER: MySQL TINYINT, SMALLINT, MEDIUMINT and INT and BIGINT scalars;DOUBLE: MySQL DOUBLE FLOAT scalars;DECIMAL: MySQL DECIMAL and NUMERIC scalars
Temporal types:
DATETIME: MySQL DATETIME and TIMESTAMP scalars;DATE: MySQL DATE scalars;TIME: MySQL TIME scalars
String types:
STRING: MySQL utf8 character type scalars;CHAR, VARCHAR, TEXT, ENUM, and SET
Binary types:
BLOB: MySQL binary type scalars;BINARY, VARBINARY, BLOB;BIT: MySQL BIT scalars
All other types:
OPAQUE (raw bits)
9、JSON_UNQUOTE去掉前后特殊字符
JSON_UNQUOTE主要是用來去掉前后的特殊字符,格式化值,目前支持一下幾種字符:
以上就是MySQL 5.7新特性| Json Column和Generated Column(上)的內容,更多相關內容請關注PHP中文網(www.php.cn)!