Mysql 5.7 新特性之 json 类型的增删改查操作和用法

Mysql 5.7 新特性之 json 类型的增删改查操作和用法

什么是json类型

JSON是JavaScript Object Notation的缩写,是一种用于数据交换的轻量级文本格式。MySQL 5.7支持JSON类型,可以在表的列中存储JSON格式的数据,这些数据可以在MySQL中进行查询和修改,支持JSON文档中的各种数据类型如字符串、数字、数组和对象。

json类型的创建

要使用JSON类型,必须在创建表时包含JSON类型,可以使用以下语法创建带有JSON类型的表:

CREATE TABLE tablename (
  columnname JSON,
  ...
)

json类型的增删改查操作

json类型数据在MySQL中可以直接进行增删改查等操作。

插入数据

使用INSERT INTO语句可以插入json类型数据,例如:

INSERT INTO tablename(columnname) VALUES('{"name":"Tom","age":18,"gender":"Male"}');

查询数据

使用SELECT语句可以查询json类型数据,可以使用JSON_EXTRACT函数来获取特定的数据,例如:

SELECT JSON_EXTRACT(columnname, '$.name') AS name, JSON_EXTRACT(columnname, '$.age') AS age
FROM tablename;

此时返回:

+------+------+ 
| name | age  | 
+------+------+ 
| Tom  | 18   |
+------+------+ 

更新数据

使用UPDATE语句可以更新json类型数据,可以使用JSON_SET函数来更新特定的数据,例如:

UPDATE tablename
SET columnname = JSON_SET(columnname, '$.age', 20)
WHERE JSON_EXTRACT(columnname, '$.name') = 'Tom';

此时会将age从18更改为20

删除数据

使用DELETE语句可以删除json类型数据,例如:

DELETE FROM tablename 
WHERE JSON_EXTRACT(columnname, '$.name') = 'Tom';

该语句将删除name为Tom的json类型数据。

示例

以下是一些实际示例:

示例1

创建一个含有json类型字段的表:

CREATE TABLE person_info (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30) NOT NULL,
    info JSON
);

向person_info表中插入一个json类型数据:

INSERT INTO person_info(name, info)
VALUES('Tom', '{"age": 18, "gender":"Male", "hobbies":["reading", "basketball"]}'); 

查询person_info表中所有人的年龄和性别:

SELECT name, JSON_EXTRACT(info, '$.age') AS age, JSON_EXTRACT(info, '$.gender') AS gender 
FROM person_info;

示例2

创建一个含有json类型字段的表:

CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30) NOT NULL,
    courses JSON
);

向student表中插入一个json类型数据:

INSERT INTO student(name, courses) 
VALUES('Tom', '{"math":{"score": 90}, "english":{"score":80}}');

更新Tom的英语成绩:

UPDATE student 
SET courses = JSON_SET(courses, '$.english.score', 85) 
WHERE name = 'Tom';

查询Tom的全部课程分数:

SELECT name, JSON_EXTRACT(courses, '$.math.score') AS math_score, JSON_EXTRACT(courses, '$.english.score') AS eng_score 
FROM student 
WHERE name = 'Tom';

示例3

创建一个含有json类型字段的表:

CREATE TABLE order_info (
    id INT PRIMARY KEY AUTO_INCREMENT,
    customer VARCHAR(30) NOT NULL,
    ordered JSON
);

向order_info表中插入一个json类型数据:

INSERT INTO order_info(customer, ordered)
VALUES('Tom', '[{"product": "book", "price": 10}, {"product": "pen", "price":2}]');

查询Tom的所有订单中的产品和价格:

SELECT JSON_EXTRACT(ordered, '$[0].product') AS product, JSON_EXTRACT(ordered, '$[0].price') AS price 
FROM order_info 
WHERE customer = 'Tom';

以上就是Mysql 5.7 新特性之 json 类型的增删改查操作和用法的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql 5.7 新特性之 json 类型的增删改查操作和用法 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • SQL Server 排序函数 ROW_NUMBER和RANK 用法总结

    SQL Server排序函数ROW_NUMBER和RANK用法总结 在SQL Server中,ROW_NUMBER和RANK是两个非常实用的排序函数。下面我们详细讲解它们的用法,以及两个示例说明。 ROW_NUMBER ROW_NUMBER函数返回每一行相对于结果集中的其他行的序列号,可以根据指定的排序顺序进行排序。语法如下: ROW_NUMBER() OV…

    database 2023年5月21日
    00
  • [GO]go redis实现滑动窗口限流-redis版

    上一篇是单机当前进程的滑动窗口限流 , 这一个是使用go redis list结构实现的滑动窗口限流 , 原理都一样 , 但是支持分布式 原理可以参考上一篇介绍 func LimitFreqs(queueName string, count uint, timeWindow int64) bool { currTime := time.Now().Unix(…

    Redis 2023年4月11日
    00
  • PHP组合查询多条件查询实例代码第2/2页

    现在我来为你详细讲解一下如何进行“PHP组合查询多条件查询实例代码”的操作步骤。 首先,我们需要明确以下几个概念: 组合查询:多个查询条件联合起来进行数据的查询操作。 index.php页面:用户输入查询条件的网页。 search.php页面:接收查询条件,并将查询结果显示给用户的网页。 下面,我将会分别详细介绍这些概念的操作流程及代码实现方式: 一、组合查…

    database 2023年5月21日
    00
  • MySQL中CURRENT_TIMESTAMP时间戳的使用详解

    MySQL中CURRENT_TIMESTAMP是一个内置的函数,用于获取当前的系统时间戳,在数据库中的应用非常广泛。本文将详细介绍这个函数的用法及其应用场景,以便读者更好地了解如何在MySQL中应用时间戳。 一、CURRENT_TIMESTAMP的基本用法 在MySQL中,可以通过以下方式来获取当前系统时间戳: SELECT CURRENT_TIMESTAM…

    database 2023年5月22日
    00
  • SQL中where和having的区别详解

    标题 SQL中where和having的区别详解 简介 在使用SQL语言进行数据查询时,where和having是两个常用的条件语句。在实际使用中,它们有着不同的用途和特点。本文将详细讲解where和having的区别,并提供实例作为示范。 where的定义和用途 where是SQL语句中常见的条件语句之一,可以在查询过程中筛选符合条件的数据。一般情况下,w…

    database 2023年5月18日
    00
  • Android在Sqlite3中的应用及多线程使用数据库的建议(实例代码)

    下面是针对“Android在Sqlite3中的应用及多线程使用数据库的建议”这个话题的详细攻略。 1. Android中Sqlite3的应用 在Android中,我们可以使用Sqlite3作为本地数据库,用来存储和管理数据。以下是Sqlite3的基础应用: 1.1 创建数据库 在Android中,我们可以通过继承SQLiteOpenHelper类来创建和管理…

    database 2023年5月19日
    00
  • 使用redis作为缓存,数据还需要存入数据库中吗?(转)

    转自https://blog.csdn.net/wypersist/article/details/79955704 使用redis作为缓存,数据还需要存入数据库中吗?     我的答案是: 1redis只是缓存,不是数据库如mysql,所以redis中有的数据库,mysql中一定有。 2用户请求先去请求redis,如果没有,再去数据库中去读取。 3redi…

    Redis 2023年4月11日
    00
  • 数据库SQL SELECT查询的工作原理

    数据库 SQL SELECT 查询是数据库操作的一个重要部分,它用于从一个或多个表中检索所需数据。下面是 SELECT 查询的工作原理: 1. SELECT 查询语法 SELECT 查询要求使用正确的 SQL 语法,其中包括以下基本组件: SELECT:要查询的列名或通配符 FROM:要从哪些表中检索数据 WHERE(可选):条件约束查询结果 ORDER B…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部