首页 > 数据库 >MySQL的Json类型个人用法详解

MySQL的Json类型个人用法详解

时间:2023-09-04 16:11:20浏览次数:42  
标签:goods price Json 详解 MySQL where id select

 前言

虽然MySQL很早就添加了Json类型,但是在业务开发过程中还是很少设计带这种类型的表。少不代表没有,当真正要对Json类型进行特定查询,修改,插入和优化等操作时,却感觉一下子想不起那些函数怎么使用。比如把json里的某个键和值作为SQL条件,修改某个键下的子键的值,其中可能会遇到数组形式的Json或者键名是字符串的数字修改异常等问题。那么,以下是小北在业务中常遇到的Json类型操作汇总了。

 

查询

1. 查询普通键

以下示例是从goods表的price字段里取出price键的值,可以依次往下取值,就是price.嵌套键名即可。

select json_extract(price, "$.price") as de from goods where id = 159540

2. 查询字符串类型的数字键

虽然以上能解决大部分取值,但有时候的json嵌套里有字符串类型的数字键名,如下图的json,要取出字段下sku键名的 "45453"键algorithm的值。

select json_extract(price, "$.sku.\"45453\".algorithm") as de from price where id = 159540

3. 查询数组类的Json指定值

以上的两种是我们常见的对象类,但当出现数组类时,就没有键名了,取值只需要指定索引即可,如下分别是查询某值和根据json的某值作为查询条件。

select JSON_EXTRACT(`crumbs`, $[1]) as one_crumbs from comment where id = 4565
select * from comment where JSON_EXTRACT(`crumbs` ,'$[1]') = 256

4. 查询Json里是否包含某个值

select * from goods_item where goods_id=10263 and JSON_CONTAINS(item_value->'$', concat(43318,''));
select * from goods_item where goods_id=10263 and JSON_CONTAINS(item_value, concat(43318,''));
select * from goods_item where goods_id=10263 and JSON_CONTAINS(item_value, concat(43318,''),'$');

5. 查询Json长度

以下的goods_img是一个数组类的Json字段,通过长度作为SQL的查询条件。

select id, stock_no, goods_img from goods_item where state = 1 and JSON_LENGTH(goods_img) < 3

 

更新

1. 修改Json字段下指定键的值

update price set price = json_set(price, "$.attr.\"1280\".price_old", 300) where id in (171314)

 

标签:goods,price,Json,详解,MySQL,where,id,select
From: https://www.cnblogs.com/zerofc/p/17677349.html

相关文章

  • iOS代码加固与保护方法详解 - 提升iOS应用安全性的关键步骤
    摘要:作为一名从事iOS开发多年的技术博主,长期以来我都没有重视代码加密和加固。然而,最近了解到使用IPAGuard工具可以对iOS应用进行混淆保护,我开始重新审视iOS应用的安全性问题。本文将详细介绍如何使用IPAGuard工具进行代码加固和保护,以提高iOS应用的安全性和抵御逆向分析的风险......
  • Mysql获取时间处理
    前置:当前时间:2023-09-04 Mysql获取昨天0点时间:SELECTTIMESTAMP(date_add(curdate(),INTERVAL-1DAY));  Mysql获取昨天23点59分59秒时间:SELECTDATE_SUB(DATE_ADD(CURRENT_DATE,INTERVAL0DAY),INTERVAL1SECOND)   Mysql获取当天0点的时间:S......
  • mysql各个执行阶段
    问题如果表T中没有字段k,而你执行了这个语句select*fromTwherek=1,那肯定是会报“不存在这个列”的错误:“Unknowncolumn‘k’in‘whereclause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢?分析优化器会进行优化分析,比如用先执行哪个条件参考......
  • MySQL MGR集群部署运维常用脚本
    Linux系统-部署-运维系列导航 安装、初始化操作汇总注意:Pass.Test.123替换为真实的root账号密码,Repl.pass.123替换为真实的mgr集群创建时group_replication_recovery通道的密码 #初始化、重置mysqlrm-rf/data/mysql/;mkdir-p/data/mysql/data/data/mysql/log;......
  • MySQL联表查询优化
    Linux系统-部署-运维系列导航  sql执行顺序执行FROM语句执行ON过滤join添加外部行执行where条件过滤执行groupby以及分组语句,(开始使用select中的别名,后面的语句中都可以使用别名)执行havingselect列表执行distinct去重复数据执行orderby字句执行limit字句 ......
  • MybatisPlus处理Mysql的json类型
    MybatisPlus处理Mysql的json类型1、在数据库表定义JSON字段;2、在实体类加上@TableName(autoResultMap=true)、在JSON字段映射的属性加上@TableField(typeHandler=JacksonTypeHandler.class);1.实体类中有个属性是其他对象,或者是List;在数据库中存储时使用的是mysql的json格式,此......
  • mysql到达梦存储过程常见问题
    1.1 变量的使用createorreplaceproceduree_test()asbegin setstrsql='selectidinto@eidfromtest2orderbyidlimit1,10'; insertintotestselectid,namefromtest2whereidin(eid); setstst=strsql; executestst;end;变量需要提前定义cre......
  • MySQL忘记root密码解决方案
    Linux系统-部署-运维系列导航 场景一:重置root密码mysql登录密码为password()算法加密,解密成本太高,以下为通用方案;原理:mysql提供了特殊启动方式,即跳过权限表验证,启动后,登录不需要提供密码;登录后,即可修改mysql数据库的user表,重置密码,然后刷新权限,重启mysql服务即可;注意:此时my......
  • docker桌面端安装mysql
    参考 https://www.yzktw.com.cn/post/735256.html1,搜索Images,mysql,选择合适的版本pull2,Images,中点击三角箭头,run,会弹出新建Containers弹框Containersname,随便写Ports需要写0Volumes选安装地址EnvironmentVarialbes需要加上密码MYSQL_ROOT_PASSWORD: 123456 3,运行......
  • keepalived实现MySQL MGR高可用(keepalived 2.2.7 + mysql 5.7.35)
    Linux系统-部署-运维系列导航 一、架构介绍MySQLMGR实现了MySQL服务的高可用、高扩展、高可靠,但在客户端只能同时连接一台服务实例,在master切换后,客户端无法感知并自动切换,所以需要搭配keepalived实现MySQLMGR集群在客户端的高可用。 二、架构搭建架构设计MySQLMGR一......