MYSQL JSON型的使用(增删改查)

本文介绍了MySQL5.7及以上版本对JSON类型数据的支持,包括表的创建、数据插入、查询、WHERE和GROUP BY语句的使用。详细讲解了JSON_ARRAY、JSON_OBJECT、JSON_CONTAINS、JSON_CONTAINS_PATH、JSON_EXTRACT等函数和运算符的用法,以及如何检索和操作JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

支持的版本:MySQL5.7以上

表生成

CREATE TABLE `json_users` (`col` JSON);

插入数据

INSERT INTO `json_users`
VALUES
('{"name": "tanaka", "gender": 1, "options": {"x": 100, "y": 200}}'),
('{"name": "yamada", "gender": 2, "options": {"x": 300}}'),
('{"name": "suzuki", "gender": 1, "options": {"x": 100, "y": 200, "z": [1, 3, 4]}}');

查询

SELECT * FROM `json_users`;

 

抽出指定数据

object的情况 ->"$.key" 的形式抽出
list的情况 ->"$[]" 的形式抽出

SELECT `col`->"$.name" FROM `json_users`;

结果含有双引号

如果想要得到没有双引号的结果则用JSON_UNQUOTE函数

SELECT JSON_UNQUOTE(`col`->"$.name") FROM `json_users`;

 

WHERE语句的使用

SELECT * FROM `json_users` WHERE `col`->"$.options.x" = 100;

GROUP BY语句的使用 

算出各个性别的人数

SELECT `col`->"$.gender" as gender, COUNT(*) FROM `json_users` GROUP BY gender;

 生成JSON数据的函数

JSON_ARRAY

( 生成 JSONlist)

格式:JSON_ARRAY([val[, val] ...])

例子:SELECT JSON_ARRAY(1, 2, 100, 'tanaka', Null);

JSON_OBJECT

格式:JSON_OBJECT([key, val[, key, val] ...])

例子:SELECT JSON_OBJECT('name', 'tanaka', 'options', JSON_OBJECT('x', 100, 'y', 200));

 JSON数据检索函数

JSON_CONTAINS
( 判断是否包含指定值 )

格式:JSON_CONTAINS(target, candidate[, path])

例子:SELECT `col`, JSON_CONTAINS(`col`, '2', '$.gender') FROM `json_users`;

找到返回1

JSON_CONTAINS_PATH
( 确定是否包含指定路径 )

格式:JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

例1包含其中一个:SELECT `col`, JSON_CONTAINS_PATH(`col`, 'one', '$.options.y', '$.options.z') FROM `json_users`;

找到返回1

 例2全匹配:SELECT `col`, JSON_CONTAINS_PATH(`col`, 'all', '$.options.y', '$.options.z') FROM `json_users`;

找到返回1

JSON_EXTRACT
( 抽出指定路径的数据 )

格式:JSON_EXTRACT(json_doc, path[, path] ...)

例返回第一个匹配的路径:SELECT `col`, JSON_EXTRACT(`col`, '$.name') FROM `json_users`;

例2返回所有匹配的路径:SELECT `col`, JSON_EXTRACT(`col`, '$.options.y') FROM `json_users`;

 

运算符 

 例子:SELECT `col`, `col`->"$.name" FROM `json_users`;

JSON_KEYS
( 只抽出key值 )

格式:JSON_KEYS(json_doc[, path])

例子:SELECT `col`, JSON_KEYS(`col`) FROM `json_users`;

 

JSON_SEARCH
( 搜索含有指定值的路径 )

以路径为参数的JSONSET和JSON也可以和REMOVE等一起活用。

格式:JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])

例1返回第一个匹配的路径:SELECT `col`, JSON_SEARCH(`col`, 'one', "yama%") FROM `json_users`;

例子2返回所有匹配的路径:SELECT `col`, JSON_SEARCH(`col`, 'all', "yama%") FROM `json_users`;

 

 *注意:无法查找数值

 如果是字符串数组,则可以查找,但如果是数字数组则无法查找。

SELECT JSON_SEARCH('["1", "2", "3"]', 'one', '2') 

 

SELECT JSON_SEARCH('[1, 2, 3]', 'one', 2);

 

MATLAB中,非齐次线性方程组可以使用命令A\b。首先,将系数矩阵A和常数项列向量b合并成增广矩阵B。然后,通过比较系数矩阵A的秩和增广矩阵B的秩来判断是否有。如果两者的秩不相等,则线性方程组。如果两者的秩相等,并且增广矩阵B的秩等于未知量个数,那么线性方程组有唯一。如果增广矩阵B的秩小于未知量个数,则线性方程组有无穷。在这种情况下,可以使用null函数来求解齐次线性方程组的基础系,并使用A\b来求解非齐次线性方程组的特。 以下是一个MATLAB函数的例子,用于非齐次线性方程组: ``` function [S_H, S_P = solveLS(A,b) if size(A,1) ~= length(b) error('输入数据错误,请重新输入!'); return; else B = [A,b]; rank_A = rank(A); rank_B = rank(B); if rank_A ~= rank_B disp('线性方程组!'); S_H = []; S_P = []; else if rank_B == size(A,2) disp('线性方程组有唯一!'); S_P = A\b; S_H = []; else disp('线性方程组有无穷!'); S_H = null(A,'r'); S_P = A\b; end end end end ``` 在运行该函数后,S_H将保存齐次线性方程组的基础系,S_P将保存非齐次线性方程组的特。 请注意,这只是一个例子,具体的决方案可能因实际问题而异。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MATLAB求解非齐次线性方程组](https://blog.youkuaiyun.com/dif90304/article/details/101758762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值