MySQL新特性

【MySQL】MySQL新特性 MySQL 作为世界上最流行的开源关系型数据库管理系统之一,其发展从未停步。从早期版本到 MySQL 5.x 系列的成熟稳定,再到 8.0 及其后续版本的飞跃,每一个新版本都带来了性能、可扩展性、安全性、可用性以及开发者友好性等方面的提升。 阅读详情

JSON类型

很多开发者在使用关系型数据库做数据持久化的时候,常常感到结构化的存储缺乏灵活性,因为必须事先设计好所有的列以及对应的数据类型。在业务发展和变化的过程中,如果需要修改表结构,这绝对是比较麻烦和难受的事情。从 MySQL 5.7 版本开始,MySQL引入了对 JSON 数据类型的支持(MySQL 8.0 解决了 JSON 的日志性能瓶颈问题),用好 JSON 类型,其实就是打破了关系型数据库和非关系型数据库之间的界限,为数据持久化操作带来了更多的便捷。

JSON 类型主要分为 JSON 对象和 JSON数组两种,如下所示。

  1. JSON 对象

{"name": "骆昊", "tel": "13122335566", "QQ": "957658"}
  1. JSON 数组

[1, 2, 3]
[{"name": "骆昊", "tel": "13122335566"}, {"name": "王大锤", "QQ": "123456"}]

哪些地方需要用到JSON类型呢?举一个简单的例子,现在很多产品的用户登录都支持多种方式,例如手机号、微信、QQ、新浪微博等,但是一般情况下我们又不会要求用户提供所有的这些信息,那么用传统的设计方式,就需要设计多个列来对应多种登录方式,可能还需要允许这些列存在空值,这显然不是很好的选择;另一方面,如果产品又增加了一种登录方式,那么就必然要修改之前的表结构,这就更让人痛苦了。但是,有了 JSON 类型,刚才的问题就迎刃而解了,我们可以做出如下所示的设计。

CREATE TABLE `tb_test`
(
`user_id`    bigint unsigned,
`login_info` json,
PRIMARY KEY (`user_id`)
);
​
INSERT INTO `tb_test` 
VALUES 
    (1, '{"tel": "13122335566", "QQ": "654321", "wechat": "jackfrued"}'),
    (2, '{"tel": "13599876543", "weibo": "wangdachui123"}');

如果要查询用户的手机和微信号,可以用如下所示的 SQL 语句。

SELECT `user_id`
     , JSON_UNQUOTE(JSON_EXTRACT(`login_info`, '$.tel')) AS 手机号
     , JSON_UNQUOTE(JSON_EXTRACT(`login_info`, '$.wechat')) AS 微信 
FROM `tb_test`;

因为支持 JSON 类型,MySQL 也提供了配套的处理 JSON 数据的函数,就像上面用到的json_extract和json_unquote。当然,上面的 SQL 还有更为便捷的写法,如下所示。

SELECT `user_id`
     , `login_info` ->> '$.tel' AS 手机号
     , `login_info` ->> '$.wechat' AS 微信
  FROM `tb_test`;

再举个例子,如果我们的产品要实现用户画像功能(给用户打标签),然后基于用户画像给用户推荐平台的服务或消费品之类的东西,我们也可以使用 JSON 类型来保存用户画像数据,示意代码如下所示。

创建画像标签表。

CREATE TABLE `tb_tags`
(
`tag_id`   int unsigned NOT NULL COMMENT '标签ID',
`tag_name` varchar(20)  NOT NULL COMMENT '标签名',
PRIMARY KEY (`tag_id`)
);
​
INSERT INTO `tb_tags` (`tag_id`, `tag_name`) 
VALUES
    (1, '70后'),
    (2, '80后'),
    (3, '90后'),
    (4, '00后'),
    (5, '爱运动'),
    (6, '高学历'),
    (7, '小资'),
    (8, '有房'),
    (9, '有车'),
    (10, '爱看电影'),
    (11, '爱网购'),
    (12, '常点外卖');

为用户打标签。

CREATE TABLE `tb_users_tags`
(
`user_id`   bigint unsigned NOT NULL COMMENT '用户ID',
`user_tags` json            NOT NULL COMMENT '用户标签'
);
​
INSERT INTO `tb_users_tags`
VALUES
    (1, '[2, 6, 8, 10]'),
    (2, '[3, 10, 12]'),
    (3, '[3, 8, 9, 11]');

接下来,我们通过一组查询来了解 JSON 类型的巧妙之处。

  1. 查询爱看电影(有10这个标签)的用户ID。

    SELECT `user_id`
      FROM `tb_users_tags`
     WHERE 10 MEMBER OF (`user_tags`->'$');
    
  2. 查询爱看电影(有10这个标签)的80后(有2这个标签)用户ID。

    SELECT `user_id`
      FROM `tb_users_tags`
     WHERE JSON_CONTAINS(`user_tags`->'$', '[2, 10]');
    
    
  3. 查询爱看电影或80后或90后的用户ID。

    SELECT `user_id`
      FROM `tb_users_tags`
     WHERE JSON_OVERLAPS(user_tags->'$', '[2, 3, 10]');
    

说明:上面的查询用到了member of谓词和两个 JSON 函数,json_contains可以检查 JSON 数组是否包含了指定的元素,而json_overlaps可以检查 JSON 数组是否与指定的数组有重叠部分。

【MySQL】MySQL8.0新特性整理 MySQL 8.0 引入了许多新特性和改进,旨在提升性能、安全性和易用性。 阅读详情

相关推荐

MySQL8.0的新特性

MySQL 8.0 是 MySQL 数据库的重要升级版本,相比 5.7 版本有多项关键改进:1. 事务性数据字典:元数据存储在 InnoDB 表中,支持 DDL 事务操作,提高崩溃恢复能力。2. 默认字符集改为 utf8mb4,支持完整 Unicode 字符集和更精确的排序规则。3. 新增窗口函数支持复杂数据分析,包括聚合函数、排名函数、分析函数和分布函数。4. 引入通用表表达式(CTE),提高复杂查询的可读性和维护性。5. 新增正则表达式函数,包括模式匹配、替换、提取和定位功能。这些改进使 MySQL 8

m0_68880377的博客 1226

MySQL必知之MySQL8新特性(二)

MySQL 8.0引入了多项重要新特性:隐藏索引允许索引软删除和灰度发布,降序索引提升排序查询性能,函数索引支持表达式和JSON数据查询。此外,通用表表达式(CTE)提供了递归查询能力,能高效处理层级数据。这些增强功能显著提升了MySQL的索引管理灵活性、查询优化能力和复杂查询处理效率。

weixin_47088026的博客 1246

【网安干货】MySQL8新特性注入技巧

新增的表 information_schema.TABLESPACES_EXTENSIONS 从mysql8.0.21开始出现的, table 关键字出现的比较早,在8.0.19之后就有了,所以如果想要使用,还是先要试试这个表有没有,如果 mysql 版本正好在 8.0.19-8.0.21 之间的话,就无法使用了 这个表好用就好用在,它直接存储了数据库和数据表 mysql> table information_schema.TABLESPACES_EXTENSIONS; +-----------

HBohan的博客 2217

mysql 9 新特性

mysql9的新特性;向量数据支持

天雨流芳 1647

【MySQL】MySQL 8 新特性

1. 默认字符集由latin1变为utf8mb4 在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。 注:在Percona Server 8.0.15版本上测试,utf8仍然指向的是utf8mb3,与官方文档有出入。 Warning | 3719 | ‘utf8’ is currently an alias for the character set UTF8MB3, but will be an al.

九师兄 1189

第18章_MySQL8其它新特性

MySQL从5.7版本直接跳跃发布了8.0版本,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是多MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。

分享思想,留下痕迹。 2103

MySQL 8 新特性详解

本文详细介绍了MySQL 8的一些重要新特性,并通过示例展示了如何在实际中使用这些特性。这些新特性包括隐藏索引、降序索引、GROUP BY操作的改变、索引中的函数表达式、原子DDL操作、行缓存相关说明、改进的成本模型、自增列持久化、新的系统字典表、对文档型数据库和JSON的更好支持、正则表达式增强以及窗口函数。这些特性在提升数据库性能、增强易用性和灵活性方面发挥了重要作用。通过了解和掌握这些新特性,用户可以更加高效地管理和查询MySQL数据库。

码到三十五 2090

22、PHP 8 和 MySQL 8 的新特性

本文详细介绍了 PHP 8 和 MySQL 8 的新特性及其实际应用。PHP 8 引入了命名参数、属性、构造函数属性、即时编译、联合类型、空安全运算符、匹配表达式等新特性,并新增了多个实用函数,提升了代码的可读性、可维护性和性能。MySQL 8 在 SQL 功能、JSON 处理、地理支持、可靠性和速度性能方面均有显著改进,如窗口函数、递归 CTE、增强的 JSON 处理能力、地理计算支持、单数据字典和信息模式加速等。文章还对比了 PHP 7 与 PHP 8、MySQL 5.7 与 MySQL 8 的差异,并

u8v9w0x1y的博客 54

Mysql8新特性

一个staff表,里面有id,有name还有一个 m_id,这个是对应的上级id。数据如下:如果我们想。

qq_64912062的博客 464

用SimaPro做碳足迹分析:手把手教你完成产品生命周期评估报告

本文详细介绍了如何使用SimaPro进行碳足迹分析,从软件安装到生命周期评估报告的完整流程。通过实战案例演示,帮助制造业企业、咨询机构和科研团队掌握产品生命周期评估(LCA)的核心技术,精准识别环境热点并优化决策,为可持续发展转型提供科学依据。

yhn45678901的博客 711

大模型推理常见采样策略:Top-k, Top-p, Temperature, Beam Search

大模型推理采样策略,举例通俗易懂汇总介绍

qq_43243579的博客 2万+

MySQL8的一些更新内容和新特性

MySQL 8.0.x 系列引入了许多新的特性和增强功能,这些更新显著提高了性能、可扩展性、安全性、以及对现代应用程序需求的支持。下面是一些主要的新特性和更新内容,以下为一些说明。

Mr_lqh325的博客 1495

ENSP之配置静态路由

ENSP之配置静态路由 两台路由器两台PC 拓扑图如下: 配置AR1线路上的两条IP地址 配置AR2线路上的两条IP地址 3.AR2上 配置静态IP 路由 AR1上 配置静态IP 路由 设置两台PC 的IP地址 网关 PC1 PC2 全部配置好了之后 现在测试PC1是否ping 得通PC2 在命令行输入 成功的话如下图 ...

浪友与泪的博客 3544

【MySQL】第18章_MySQL8其它新特性

MySQL 8开始支持原子数据定义语句(Automic DDL),即。

博客包含书籍、B站、其他博主博客等内容,只为了记录笔记,作业,问题,软件配置等,为了以后方便查阅,如有侵权,请联系删除 411

JDK8升级JDK17过程中遇到的那些坑

JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。

BASK2312的博客 6682

Xilinx ZYNQ 7000学习笔记二(FSBL代码分析启动-汇编代码)

Xilinx ZYNQ 7000学习笔记

u011116085的博客 4246

MySQL 8.0 新特性汇总

MySQL 5.7 在 2023 年 10 月 31 日起,已经终止软件生命周期了,意味着 MySQL 官方将不再提供对 MySQL 5.7 版本的技术支持和更新。8.0 版本成为官方长期支持版本,提供了很多新特性,本文将详细解读 MySQL 8.0 版本的新特性,为 MySQL 版本升级作参考和指导。MySQL 8.0 相比 5.7 版本更新很多新特性,很多改变没有直接删除,便于用户过渡,兼容性还是比较高的。不过到 8.1、8.2 的创新版本,老的 5.7 的参数和语法就已经删除。

m0_74823561的博客 1906

Python《打砖块》小游戏

Python《打砖块》小游戏!

PanDaoxi 1273

MySQL基础(十八)MySQL8其它新特性

MySQL从5.7版本直接跳跃发布了8.0版本,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。

zhufei463738313的博客 1382

Cgroup对进程所占用的CPU与内存资源同时进行限制的测试

测试环境:Ubuntu。处理器数量:1CPU。内存大小:2048MB。 以下是测试程序mem_cpu_test.c的代码。 将mem_cpu_test.c编译为可以运行的程序mem_cpu_test。 运行程序,并用top命令查看mem_cpu_test所占用的系统资源情况,可以看到,mem_cpu_test使用了50%左右的内存资源,也就是1000MB左右,并占用了接近全部的CPU资源。 关闭以上的程序后,在Cgroup子系统memory和cpu下分别创建进程组test1和test2。 并设置tes

qq_44998067的博客 1152

大模型算法岗常见面试题100道

LangChain是一个用于构建和运行大型语言模型应用的开源框架。它提供了一套工具和组件,帮助开发者将大型语言模型(如 GPT-3)与其他工具和API结合,以完成更复杂的任务。1、LangChain包含哪些核心概念?Components:可重用的模块,例如API调用、数据库查询等。Chains:将多个Components链接在一起以完成特定任务的流程。Prompt Templates: 用于指导语言模型生成输出的文本模板。Output Parsers:解析语言模型输出的工具。

具身机器人和通用AI 1958

关于MySQL 8.0的几个重点新特性及其他版本浅谈

大家好今天又与大家见面了。IT技术无领域、国界之分,不断学习最新技术走在IT技术前沿一直是我们的目标网站模板下载争取把自己所学的知识,所经历的经验,拿出来与大家分享,共同成长与进步。在当前这个群雄并起的大环境下,与其分开时各自牛逼,不如在一起时天下无敌! 在这个开源数据库纷纷而起的时代,我们一定要找准自己学习的一个方向,不要盲目地去做一些无用功,而浪费自己的时间。在这些众多开源数据库当中,龙头大...

halotech的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MySQL必知之MySQL8新特性(一)

ySQL 8.0带来了多项账户安全改进:1)用户创建与授权必须分开执行;2)默认认证插件改为caching_sha2_password,可能导致旧客户端连接问题;3)增强密码管理,包括密码历史记录限制和旧密码校验功能。

weixin_47088026的博客 601

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

MySQL5.7的新特性

MySQL 5.7版本据说已经在了很大的性能提升以及做得更加安全了,想了解更多MySQL 5.7的新特性可以参考我转载叶金荣老师的MySQL 5.7的新特性说明。这里我简单演示一下MySQL 5.7的安装已经一些新特性的使用,希望大家能一起进去,一起探讨技术。 MySQL 5.7的官方下载地址:http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7....

chen_heng_Ali的博客 261

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL 8.0新特性详解

从上图可以看出SQL及索引的优化效果是最好的,而且成本最低,所以工作中我们要在这块花更多时间。配置文件my.ini(windows)或my.cnf(linux)的全局参数:下面参数都是服务端参数,默认在配置文件的 [mysqld] 标签下连接的创建和销毁都需要系统资源,比如内存、文件句柄,业务说的支持多少并发,指的是每秒请求数,也就是QPS。一个连接最少占用内存是256K,最大是64M,如果一个连接的请求数据超过64MB(比如排序),就会申请临时空间,放到硬盘上。

qq_45061342的博客 1815

MySQL 5.7 新特性笔记

选取了部分觉得能用上的,完整版参考《MySQL管理之道,性能调优,高可用与监控》 一、 安全性 1. 默认开启SSL 在传输层加密网络连接,保障数据在网络传输的安全。 配置与使用 通过如下命令开启SSL加密,执行后会在/data目录下生成.pem文件,这就是ssl连接所需的文件。 mysql_ssl_rsa_setup 创建用户时需要指定该用户通过SSL连接。 create u...

Hehuyi_In的博客 2137
上一篇: python调用接口获取网络信息
下一篇: 使用Django之Django快速上手
veminhe
博客等级 码龄14年 721粉丝 426原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值