Mysql / MariaDB 操作 《 json 》 字段

Mysql / MariaDB 操作 《 json 》 字段

Mysql / MariaDB 操作 《 json 》 字段


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

问题:
在使用mysql的过程中会有一些需求,需要把json(字典)或者数组json存到一个字段中,这样存取会比较方便
但是如果需要筛选则需要把这个字段里的数据查出来在程序中逐个筛选。
解决方案:
使用mysql自带函数直接筛选


环境

数据库:10.3.24-MariaDB (**<font color="red">如果是mysql需要大于5.7版本</font>**)

文档:[JSON_SEARCH - MariaDB Knowledge Base](https://mariadb.com/kb/en/json_search/)  https://mariadb.com/kb/en/json_search/

一、数据库结构

CREATE TABLE `json_test`  (
  `id` int(64) NOT NULL AUTO_INCREMENT COMMENT ' id',
  `json_value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'json',
  `json_arr_value` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '数组json',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `idx_id`(`id`) USING BTREE
)

在这里插入图片描述

MariaDB [env]> select * from json_test;
+-----+----------------------+-----------------------------+
| id  | json_value           | json_arr_value              |
+-----+----------------------+-----------------------------+
| 134 | {"a": "1", "b": "2"} | [{"a": "te", "b": "te"}]    |
| 135 | {"a": "3", "b": "4"} | [{"a": "tes", "b": "test"}] |
+-----+----------------------+-----------------------------+

json_value 是 json格式

json_arr_value 是 arr[json]格式

二、使用方法

1.查找 json_value 字段中 a字段 等于1

JSON_VALUE 函数 (返回json中的值,可以用来模糊查找)

select * from json_test where json_value(json_value, '$.a') = '1'

JSON_CONTAINS 函数 (找到了返回1,没找到返回0)

JSON_QUOTE (对数据进行转义,字符串加双引号)

select * from json_test where JSON_CONTAINS(json_value, JSON_QUOTE('1'), '$.a')

JSON_EXTRACT 函数 (根据路径提取值)

select * from json_test where JSON_EXTRACT(json_value, '$.a') = '1'

JSON_SEARCH 函数 (搜索值返回值的索引)

select * from json_test where JSON_SEARCH(json_value, 'all', '1') is not null

三、常用方法

方法名参数使用方法备注
JSON_EXISTS(json数据,键名)json_exists(‘{“a”: “1”}’, “$.a”)找到返回1,没找到返回0
JSON_SEARCH(json数据,value值)JSON_SEARCH(json_value, ‘all’, ‘1’)返回值所在的索引
JSON_VALUE(json数据,键名)json_value(json_value, ‘$.a’)返回value值(不带引号)
JSON_CONTAINS(json数据,value值,键名)JSON_CONTAINS(json_value, JSON_QUOTE(‘1’), ‘$.a’)找到了返回1,没找到返回0
JSON_EXTRACT(json数据,键名)JSON_EXTRACT(json_value, ‘$.a’)根据路径提取值(带引号)

总结

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL是一个开源的关系型数据库管理系统,它是最流行的数据库之一。在启动MySQL时,你可能会遇到一些错误信息,比如你提到的错误信息:Logging to '/var/log/mariadb/mariadb.log'. ERROR! The server quit without updating PID file (/data/mysql/mysql.pid)。 这个错误通常是由于MySQL服务器无法正常启动导致的。可能的原因包括配置错误、权限问题或者其他系统问题。为了解决这个问题,你可以尝试以下几个步骤: 1. 检查配置文件:确保MySQL的配置文件(通常是my.cnf或my.ini)中的设置正确。特别是检查日志文件路径和PID文件路径是否正确配置。 2. 检查权限:确保MySQL服务器进程有足够的权限来读取和写入相关文件和目录。你可以尝试使用管理员权限启动MySQL服务器。 3. 检查日志文件:查看日志文件(/var/log/mariadb/mariadb.log)中的详细错误信息,以便更好地理解问题所在。日志文件中可能会提供有关错误原因的更多信息。 4. 检查进程状态:使用系统工具(如ps命令)检查是否有其他MySQL进程正在运行。如果有,请停止这些进程并尝试重新启动MySQL。 5. 检查文件权限:确保MySQL相关文件和目录的权限设置正确。特别是检查PID文件所在目录的权限,确保MySQL服务器可以创建和更新PID文件。 如果以上步骤都没有解决问题,你可能需要进一步调查其他可能的原因,比如系统资源不足或者其他软件冲突等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mtl1994

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值