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日

相关文章

  • 基于centos7快速安装mysql5.7教程解析

    以下是关于“基于CentOS 7快速安装MySQL 5.7教程解析”的完整攻略。 安装MySQL 5.7 第一步:添加MySQL 5.7 Yum源 首先,需要添加MySQL 5.7 Yum源,可以从MySQL官网获取。以下是添加MySQL 5.7 Yum源的示例: sudo wget https://repo.mysql.com/mysql57-commun…

    database 2023年5月22日
    00
  • Oracle利用errorstack追踪tomcat报错ORA-00903 无效表名的问题

    针对“Oracle利用errorstack追踪tomcat报错ORA-00903 无效表名的问题”,以下是完整攻略。 问题描述 在使用tomcat连接Oracle数据库时,出现ORA-00903 无效表名的错误。这种错误通常是由于没有正确引用或拼写表名导致的。本文将讲解使用errorstack追踪该问题的方法。 解决方法 使用errorstack追踪ORA-…

    database 2023年5月18日
    00
  • Linux中/var/spool/postfix/maildrop占空间很大的原因解析

    下面是关于“Linux中/var/spool/postfix/maildrop占空间很大的原因解析”的完整攻略。 问题现象描述 在 Linux 系统中,/var/spool/postfix/maildrop 的空间占用很大,而且邮件数量并不多,这是什么原因呢?本文将给出相关解析。 分析原因 /var/spool/postfix/maildrop 是 Post…

    database 2023年5月22日
    00
  • 100道MySQL常见面试题总结(推荐)

    100道MySQL常见面试题总结(推荐) 完整攻略 前言 MySQL 是一种常见的数据库管理系统,已经跨越多个行业,并被广泛使用。在 MySQL 面试中,面试官经常会问到有关 MySQL 的问题,因此掌握一些 MySQL 的常见问题是非常重要的。本文总结了100道 MySQL 常见的面试题,帮助读者快速了解 MySQL,并在面试中获得优势。 题目分类 本文将…

    database 2023年5月22日
    00
  • 记一次MySQL的优化案例

    我可以为您讲解一下“记一次MySQL的优化案例”的完整攻略。整个攻略的思路可以分为如下几个步骤: 确认问题的存在并理解问题:在开始优化前,我们需要先确认问题的存在并理解问题。通过查看MySQL的慢查询日志,可以获得一些慢查询语句的信息,包括哪些语句耗时长、执行频率高等等。同时也需要了解MySQL的优化技巧和原理,才能更好地定位问题和优化。 定位问题的原因:在…

    database 2023年5月19日
    00
  • Redis数据库安全详解

    Redis数据库安全攻略 1. Redis数据库安全威胁 Redis是一个非关系型数据库,具有快速、高性能、分布式、可扩展等特点。但同时,由于其使用方式和架构设计的特殊性,也容易受到多种安全威胁。这些威胁包括: 未授权访问:由于Redis默认配置不需要密码即可访问,如果未进行密码设置或正确的网络隔离,攻击者可以通过网络直接访问到Redis实例并进行恶意操作。…

    database 2023年5月18日
    00
  • 动态组合SQL语句方式实现批量更新的实例

    动态组合SQL语句方式实现批量更新,主要指的是通过程序动态生成SQL语句,实现更新多条数据的操作。此种方式常用于数据批量导入、快速修改等场景。下面是实现该方式的完整攻略,包含两条示例说明。 1. 使用动态SQL语句实现批量更新 首先,我们需要通过程序在后台动态生成SQL语句。这里以Java语言为例,更多语言的实现方式可以自行查找相关文档。示例代码如下: St…

    database 2023年5月21日
    00
  • Lua 数据类型和 Redis 数据类型之间转换

    当 Lua 通过 call() 或 pcall() 函数执行 Redis 命令的时候,命令的返回值会被转换成 Lua 数据结构。 同样地,当 Lua 脚本在 Redis 内置的解释器里运行时,Lua 脚本的返回值也会被转换成 Redis 协议(protocol),然后由 EVAL 将值返回给客户端。 数据类型之间的转换遵循这样一个设计原则:如果将一个 Red…

    Redis 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部