1. 程式人生 > >MySQL 5.7 使用原生JSON型別的例子

MySQL 5.7 使用原生JSON型別的例子

【原創文章,轉載請註明原文章地址,謝謝!】

首先回顧一下JSON的語法規則:

資料在鍵值對中,
資料由逗號分隔,
花括號儲存物件,
方括號儲存陣列。

按照最簡單的形式,可以用下面的JSON表示:

{"NAME": "Brett", "email": "[email protected]"}

如何在MySQL中使用JSON型別:

新建user表,設定lastlogininfo列為JSON型別。

mysql> CREATE TABLE user(id INT PRIMARY KEY, name VARCHAR(20) , lastlogininfo JSON);
Query OK, 0 rows affected (0.27 sec)

向user表插入普通資料與json資料。mysql會對插入的資料進行JSON格式檢查,確保其符合JSON格式,若插的是不合法的資料,會出現Invalid JSON text錯誤。

mysql> INSERT INTO user VALUES(1 ,"lucy",'{"time":"2015-01-01 13:00:00","ip":"
192.168.1.1","result":"fail"}');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO user VALUES(2 ,"bobo",'{"time":"2015-10-07 06:44:00","ip":"
192.168.1.0","result":"success"}');
Query OK, 1 row affected (0.04 sec)

也可以使用JSON_OBJECT()函式:

mysql> INSERT INTO user VALUES(1 ,"lucy",JSON_OBJECT("time",NOW(),"ip","
192.168.1.1","result","fail"));
Query OK, 1 row affected (0.00 sec)

查詢name為'lucy'的最後登陸資訊。

mysql> SELECT lastlogininfo FROM user WHERE name = 'lucy';
+------------------------------------------------------------------------+
| lastlogininfo  |
+------------------------------------------------------------------------+
| {"ip": "192.168.1.1", "time": "2015-01-01 13:00:00", "result": "fail"} |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)

查詢最後登陸時間在2015-10-02後的使用者。JSON資料使用->操作符,其表示式為:該json列->'$.鍵'與JSON_EXTRACT(json列 , '$.鍵')等效使用。如果傳入的不是一個有效的鍵,則返回Empty set。該表示式可以用於SELECT查詢列表 ,WHERE/HAVING , ORDER/GROUP BY中,但它不能用於設定值。

表示式 : json列->'$.鍵'

mysql>  SELECT * FROM user WHERE lastlogininfo ->'$.time' > '2015-10-02';
+-----------------------------------------------------------------------+
| id | name | lastlogininfo|
+-----------------------------------------------------------------------+
|  2 | bobo | {"ip": "192.168.1.0", "time": "2015-10-07 06:44:00", "result": "success"} |
+-----------------------------------------------------------------------+
1 row in set (0.00 sec)

等價於 :JSON_EXTRACT(json列 , '$.鍵')

mysql>  SELECT * FROM user WHERE JSON_EXTRACT(lastlogininfo,'$.time') > '2015-10-02';
+-----------------------------------------------------------------------+
| id | name | lastlogininfo|
+-----------------------------------------------------------------------+
|  2 | bobo | {"ip": "192.168.1.0", "time": "2015-10-07 06:44:00", "result": "success"} |
+-----------------------------------------------------------------------+
1 row in set (0.00 sec)

比較JSON值採用兩個級別。第一級是基於JSON型別的比較。如果型別不同,則取決於哪種型別具有更高的優先順序。如果是相同的JSON型別,則是第二級,使用該型別的規則來比較。

下面的列表顯示了JSON型別的比較規則,從最高優先順序到最低優先順序。顯示在一行的型別則是具有相同的優先順序。

BLOB
BIT
OPAQUE
DATETIME
TIME
DATE
BOOLEAN
ARRAY
OBJECT
STRING
INTEGER, DOUBLE
NULL

使用JSON_TYPE()函式返回指定屬性對應的型別名稱:

mysql> SELECT JSON_TYPE(lastlogininfo->'$.ip') FROM user;
+----------------------------------+
| JSON_TYPE(lastlogininfo->'$.ip') |
+----------------------------------+
| STRING   |
| STRING   |
+----------------------------------+
2 rows in set (0.00 sec)

值得一提的是,可以通過虛擬列對JSON型別的指定屬性進行快速查詢。

建立虛擬列:

mysql> ALTER TABLE user ADD lastloginresult VARCHAR(15)
    -> GENERATED ALWAYS AS (lastlogininfo->'$.result') VIRTUAL;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

使用時和普通型別的列查詢是一樣的:

mysql> SELECT lastloginresult FROM user WHERE name='lucy';
+-----------------+
| lastloginresult |
+-----------------+
| "fail"  |
+-----------------+
1 row in set (0.00 sec)

相關推薦

MySQL 5.7原生JSON格式支持

html sum 很多 depend UNC 報錯 contain pen define 01. 在MySQL與PostgreSQL的對比中,PG的JSON格式支持優勢總是不斷被拿來比較。其實早先MariaDB也有對非結構化的數據進行存儲的方案,稱為dynamic colu

MySQL 5.7Json操作

info result mysql 5.7 插入記錄 res 刪除 建表 arch 1.2 創建表CREATE TABLE t_json(id INT PRIMARY KEY, NAME VARCHAR(20) , info JSON); 插入記錄 INSERT INTO

MySQL 5.7JSON特性

    Mysql 5.7之後開始支援Json格式的原生欄位型別,現將json新特性作如下整理,僅供參考。 JSON函式的完整列表: Mysql官方給出的json相關的函式,完整列表如下: 分類 函式 描述

MYSQL 5.7 新增 JSON 方面的系統函式支援

select PageInfo->'$.utmSource', JSON_UNQUOTE(json_extract(PageInfo,'$.utmSource')) from BLP_WinningRecord where id =140455331JSON_UNQUO

MySQL 5.7 使用原生JSON型別例子

【原創文章,轉載請註明原文章地址,謝謝!】 首先回顧一下JSON的語法規則: 資料在鍵值對中, 資料由逗號分隔, 花括號儲存物件, 方括號儲存陣列。 按照最簡單的形式,可以用下面的JSON表示: {"NAME": "Brett", "email": "[emai

mysql 5.7 新特性之 json 型別 基本操作

近幾年來,nosql大行其道,json更是火的一塌糊塗,作為資料庫的元老,mysql在5.7版本中添加了對json資料的支援。這片部落格主要記錄對mysql json型別的學習筆記和總結心得。首先建立一個數據庫learnjson,並建立一張表json_start:create

MySQL 5.7新支持--------Json索引創建實戰

mysql dba 索引 json 1. 背景  * 在MySQL 5.7.8中,MySQL支持由RFC 7159定義的本地JSON數據類型,它支持對JSON(JavaScript對象標記)文檔中的數據進行有效訪問.  * MySQL會對DML JSON數據自動驗證。無效的DML JSON數據操作

MySQL 5.7 新特性 JSON 的建立,插入,查詢,更新

從 MySQL 5.7.8 開始,MySQL 支援原生的 JSON 資料型別。 建立 JSON 類似 varchar,設定 JSON 主要將欄位的 type 是 json, 不能設定長度,可以是 NULL  但不能有預設值。 mysql> CREATE

MySQL-5.7】日期與時間型別

MySQL中的日期與時間型別,主要包括:YEAR、TIME、DATE、DATETIME、TIMESTAMP,下表中列出了這幾種型別的屬性。型別名稱日期格式日期範圍佔用空間YEARYYYY1901 ~ 21551位元組TIMEHH:MM:SS-838:59:59 ~ 838:5

mysql 5.7.3.0-m13安裝教程

com 處理 技術分享 mysql 5.7 bench aid target 驗證 htm 安裝mysql百度經驗地址:(默認安裝,除了選擇不更新和選擇保存路徑,其它基本是下一步下一步) http://jingyan.baidu.com/article/7e4409

windows下mysql 5.7的配置全過程

希望 圖片 all str success ans bst alt database 這是一套在好多次的安裝下總結出來的經驗,包括很多種遇到的問題,查過很多資料,特此總結一下。 一、從官網下載MySQL的zip(免安裝的) 解壓mysql-5.7.11-winx64.zip

在CentOS 7上源碼編譯安裝MySQL 5.7

mysql source cmake 1.系統環境[[email protected]/* */ ~]# uname -r3.10.0-514.el7.x86_64 [[email protected]/* */ ~]# cat /etc/redhat-release

yum && 編譯 安裝mysql 5.7 多實例

name mon symbol server-id service lin extra safe min yum安裝 [[email protected]/* */ ~]# wget http://repo.mysql.com/mysql57-community

MySql-5.7.17 -winx64的安裝配置

mysql一、下載軟件1. 進入mysql官網,登陸自己的Oracle賬號(沒有賬號的自己註冊一個),下載Mysql-5.7.17,下載地址:http://dev.mysql.com/downloads/mysql/2.將下載好的文件解壓到指定目錄,解壓在E:\mysql-5.7.17-winx64二、安裝

MySQL 5.7.10最新版本號源碼安裝具體過程

ngs htm org ear xpl can 數據文件 private which 1,下載地址:安裝包下載地址:http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.10.tar.gz能夠wget下載,也能夠在p

JDBC——Mysql 5.7綠色版配置安裝過程

5.6 配置文件 mov 新版 否則 download 查看系統 管理員 then 前言: JDBC是Java鏈接數據庫總要接口; 學習JDBC之前最重要的是要配置好數據庫(Mysql); 以下是配置Mysql步驟; 本章大體分為 下載 和 配置安裝過程

MySQL的show profile簡介以及該功能在MySQL 5.7中performance_schema中的替代

資源 指標 context 繼續 過程 tar view update 語句 本文出處:http://www.cnblogs.com/wy123/p/6979499.html   show profile 命令用於跟蹤執行過的sql語句的資源消耗信息,可以幫

mysql 5.7 解決 set global slow_query_log=on;報錯

mysql 工作中,需要查看mysql的top 20 慢sql,逐個進行優化,加上必要的索引。 但發現慢查詢日誌沒有開啟: mysql> show variables like "%query%";+------------------------------+-----------------

centos 7 + mysql 5.7.13 重置數據庫的root密碼

linux centos7 系統 centos 7 + mysql 5.7.13重置root密碼步驟: # vi /etc/my.cnf # [mysqld]下skip-grant-tables 內容前添加# # mysql -uroot -p 連續輸入enter 進入 # use mysql

mysql-5.7.9 shutdown 語法詳解

resp 登錄 ive conn denied 權限不足 這樣的 fec comm mysql-5.7.9 終於提供shutdown 語法啦:   之前如果想關閉一個mysql數據庫可以通過kill 命令、mysqladmin shutdown 、service mysql