JSON缩写为 JavaScript对象符号。它是一种轻量级数据交换格式,与其他数据类型相似,并且可以很容易地被人类读取和写入。
MySQL 支持版本5.7.8 中的本机JSON数据类型,该数据以内部格式存储JSON文档,从而实现了对文档对象的有效读取访问。
JSON文档所需的存储空间与 LONGBLOB 和 LONGTEXT 的存储需求大致相同。
无涯教程可以使用以下索引在MySQL表中定义JSON数据类型列:
CREATE TABLE table_name ( ... json_column_name 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 - 列存储访问网站的用户信息以及properties和browser_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;
将看到如下输出:
假设无涯教程要从JSON列中检索任何特定的值,例如浏览器名称。可以使用列路径运算符(->)过滤这些类型的结果。请参阅以下查询:
mysql> SELECT event_id, browser_name->'$.name' AS browser FROM events;
它将返回以下输出:
在此图中,您会注意到在浏览器列的数据周围用双引号引起来。如果要获取浏览器列的数据而没有任何引号,则需要使用内联路径运算符(->>).
mysql> SELECT event_id, browser_name->>'$.name' AS browser FROM events;
在下面的输出中,可以看到引号已被成功删除。
链接:https://www.learnfk.comhttps://www.learnfk.com/mysql/mysql-json.html
来源:LearnFk无涯教程网
如果要检索浏览器的使用情况,可以使用以下语句:
mysql> SELECT browser_name->>'$.name' AS browser, count(browser_name) FROM events GROUP BY browser_name->>'$.name';
将得到以下结果:
如果无涯教程要计算访问者的总收入,可以按以下方式使用查询:
mysql> SELECT visitors, SUM(properties->>'$.amount') As total_revenue FROM events WHERE properties->>'$.amount' > 0 GROUP BY visitors;
将得到如下结果:
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)