MySQL - JSON类型

MySQL - JSON类型 首页 / MySQL入门教程 / MySQL - JSON类型

JSON缩写为 JavaScript对象符号。它是一种轻量级数据交换格式,与其他数据类型相似,并且可以很容易地被人类读取和写入。

MySQL 支持版本5.7.8 中的本机JSON数据类型,该数据以内部格式存储JSON文档,从而实现了对文档对象的有效读取访问。

JSON文档所需的存储空间与 LONGBLOB LONGTEXT 的存储需求大致相同。

无涯教程可以使用以下索引在MySQL表中定义JSON数据类型列:

CREATE TABLE table_name (
    ...
    json_column_name JSON,
    ... 
);

NOTE: 请注意,无法在JSON列中存储非null的默认值。而且,无法直接索引JSON列,因为它通过从JSON列中提取标量值来创建索引。如果想从JSON列中检索数据,则MySQL优化程序将搜索与JSON表达式匹配的兼容索引。

JSON数据类型示例

假设无涯教程要跟踪访问网站的用户及其行为,例如,某些用户仅看到该页面,而另一些用户将访问该页面并购买产品,创建一个名为" events"的新表,该表将使用以下语句存储此信息:

CREATE TABLE events( 
  event_id INT AUTO_INCREMENT PRIMARY KEY, 
  event_name varchar(75), 
  visitors varchar(25), 
  properties json, 
  browser_name json
);

event_id            -  用于唯一标识事件表中的每个事件。

evvent_name   -  名称存储事件的名称,例如页面浏览,购买等。

visitors              -  列存储访问网站的用户信息以及propertiesbrowser_name列用于保留JSON值。 Browser_name列存储访问者用来浏览网站的浏览器规范,例如浏览器名称,操作系统,分辨率等。

接下来,将使用下面给出的 INSERT语句将数据插入该表:

INSERT INTO events (event_name, visitors, properties, browser_name) 
VALUES (
  'page-view', 
   '2',
   '{"page": "/"}',
   '{ "name": "Google Chrome", "OS": "Windows", "resolution": {"x": 1920, "y": 1080} }'
),
('page-view', 
  '3',
  '{"page": "/products"}',
  '{ "name": "Safari", "OS": "UNIX", "resolution": {"x": 2560, "y": 1600} }'
),
(
  'page-view', 
  '1',
  '{"page": "/contacts"}',
  '{ "name": "Mozilla Firefox", "OS": "Mac", "resolution": {"x": 1920, "y": 1080} }'
),
(
  'purchase', 
   '4',
  '{"amount": 250}',
  '{ "name": "Google Chrome", "OS": "Windows", "resolution": {"x": 1280, "y": 800} }'
),
(
  'purchase', 
   '3',
  '{"amount": 350}',
  '{ "name": "Safari", "OS": "Mac", "resolution": {"x": 1600, "y": 900} }'
),
(
  'purchase', 
  '4',
  '{"amount": 400}',
  '{ "name": "Mozilla Firefox", "OS": "Windows", "resolution": {"x": 1280, "y": 800} }'
);

现在,可以验证表,执行 SELECT语句,如下所示:

mysql> SELECT * FROM events;

将看到如下输出:

MySQL JSON

假设无涯教程要从JSON列中检索任何特定的值,例如浏览器名称。可以使用列路径运算符(->)过滤这些类型的结果。请参阅以下查询:

mysql> SELECT event_id, browser_name->'$.name' AS browser FROM events;

它将返回以下输出:

MySQL JSON

在此图中,您会注意到在浏览器列的数据周围用双引号引起来。如果要获取浏览器列的数据而没有任何引号,则需要使用内联路径运算符(->>).

mysql> SELECT event_id, browser_name->>'$.name' AS browser FROM events;

在下面的输出中,可以看到引号已被成功删除。

链接:https://www.learnfk.comhttps://www.learnfk.com/mysql/mysql-json.html

来源:LearnFk无涯教程网

MySQL JSON

如果要检索浏览器的使用情况,可以使用以下语句:

mysql> SELECT browser_name->>'$.name' AS browser, count(browser_name)
    FROM events GROUP BY browser_name->>'$.name';

将得到以下结果:

MySQL JSON

如果无涯教程要计算访问者的总收入,可以按以下方式使用查询:

mysql> SELECT visitors, SUM(properties->>'$.amount') As total_revenue
FROM events WHERE properties->>'$.amount' > 0 GROUP BY visitors;

将得到如下结果:

无涯教程网

MySQL JSON

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

玩转Git三剑客 -〔苏玲〕

重学前端 -〔程劭非(winter)〕

TypeScript开发实战 -〔梁宵〕

后端技术面试 38 讲 -〔李智慧〕

软件设计之美 -〔郑晔〕

基于人因的用户体验设计课 -〔刘石〕

Redis源码剖析与实战 -〔蒋德钧〕

去无方向的信 -〔小麥〕

手把手带你写一个MiniSpring -〔郭屹〕

好记忆不如烂笔头。留下您的足迹吧 :)