炸裂!MySQL 82 张图带你飞!(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 这篇文章我们来了解一下 MySQL 中的高级内容。

SQL Mode 三种作用域

SQL Mode 按作用区域和时间可分为 3。个级别,分别是会话级别,全局级别,配置(永久生效)级别

我们上面使用的 SQL Mode 都是 会话级别,会话级别就是当前窗口域有效。它的设置方式是

set @@session.sql_mode='xx_mode'
set session sql_mode='xx_mode'

全局域就是当前会话关闭不失效,但是在 MySQL 重启后失效。它的设置方式是

set global sql_mode='xx_mode';

set @@global.sql_mode='xx_mode';

配置域就是在 vi /etc/my.cnf 里面添加

[mysqld]
sql-mode = "xx_mode"

配置域在保存退出后,重启服务器,即可永久生效。

SQL 正则表达式

正则表达式相信大家应该都用过,不过你在 MySQL 中用过正则表达式吗?下面我们就来聊一聊 SQL 中的正则表达式。

正则表达式(Regular Expression) 是指一个用来描述或者匹配字符串的句法规则。正则表达式通常用来检索和替换某个文本中的文本内容。很多语言都支持正则表达式,MySQL 同样也不例外,MySQL 利用 REGEXP 命令提供给用户扩展的正则表达式功能。下面是 MySQL 中正则表达式的一些规则。

微信图片_20220418193256.png

下面来演示一下正则表达式的用法

  • ^ 在字符串的开始进行匹配,根据返回的结果来判断是否匹配,1 = 匹配,0 = 不匹配。下面尝试匹配字符串 aaaabbbccc 是否以字符串 a 为开始
select 'aaaabbbccc' regexp '^a';

微信图片_20220418193300.png

  • 同样的,$</code> 会在末尾处进行匹配&#xff0c;如下所示</li></ul><div><div class="lake-codeblock-content" style="border:1px solid rgb( 232 , 232 , 232 );max-width:750px;color:rgba( 0 , 0 , 0 , 0.65 );margin:0px;padding:0px;background:rgb( 249 , 249 , 249 )"><div class="CodeMirror-sizer" style="color:rgb( 89 , 89 , 89 );margin:0px;padding:16px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba( 0 , 0 , 0 , 0 )"><pre class="cm-s-default" style="color:rgb( 89 , 89 , 89 );margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba( 0 , 0 , 0 , 0 )"><span class="lake-preview-line" style="color:rgb( 89 , 89 , 89 );margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba( 0 , 0 , 0 , 0 )"><span class="lake-preview-line-number lake-lm-pad-level-0" style="color:rgb( 191 , 191 , 191 );margin:0px 8px 0px 0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba( 0 , 0 , 0 , 0 )"></span><span class="lake-preview-codeblock-content" style="color:rgb( 89 , 89 , 89 );margin:0px;padding:0px;background:none 0% 0% / auto repeat scroll padding-box border-box rgba( 0 , 0 , 0 , 0 )">select &#39;aaaabbbccc&#39; regexp &#39;c$';

微信图片_20220418193303.png

  • . 匹配单个任意字符
select 'berska' regexp '.s', 'zara' regexp '.a';

微信图片_20220418193306.png

  • [...] 表示匹配括号内的任意字符,示例如下
select 'whosyourdaddy' regexp '[abc]';

微信图片_20220418193310.png

  • 1 匹配括号内不包含的任意字符,和 [...] 是相反的,如果有任何匹配不上,返回 0 ,全部匹配上返回 1。
select 'x' regexp '2';

微信图片_20220418193314.png

  • n 表示匹配零个或者多个 n 字符串,如下
select 'aabbcc' regexp 'd';

微信图片_20220418193317.png

没有 d 出现也可以返回 1 ,因为 * 表示 0 或者多个。

  • n+ 表示匹配 1 个或者 n 个字符串
select 'aabbcc' regexp 'd+';

微信图片_20220418193321.png

  • n? 的用法和 n+ 类似,只不过 n? 可以匹配空串

常见 SQL 技巧

RAND() 函数

大多数数据库都会提供产生随机数的函数,通过这些函数可以产生随机数,也可以使用从数据库表中抽取随机产生的记录,这对统计分析来说很有用。

在 MySQL 中,通常使用 RAND() 函数来产生随机数。RAND() 和 ORDER BY 组合完成数据抽取功能,如下所示。

我们新建一张表用于数据检索。

CREATE TABLE `clerk_Info` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`salary` decimal(10,2) DEFAULT NULL,
`companyId` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

然后插入一些数据,插入完成后的数据如下。

微信图片_20220418193325.png

然后我们可以使用 RAND() 函数进行随机检索数据行

select * from clerk_info order by rand();

检索完成后的数据如下

微信图片_20220418193328.png

多次查询后发现每次检索的数据顺序都是随机的。

这个函数多用于随机抽样,比如选取一定数量的样本在进行随机排序,需要用到 limit 关键字。

GROUP BY + WITH ROLLUP

我们经常使用 GROUP BY 语句,但是你用过 GROUP BYWITH ROLLUP 一起使用的吗?使用 GROUP BY 和 WITH ROLLUP 字句可以检索出更多的分组集合信息。

我们仍旧对 clerk_info 表进行操作,我们对 name 和 salary 进行分组统计工资总数。

select name,sum(salary) from clerk_info group by name with rollup;

微信图片_20220418193332.png

可以看到上面的表按照 name 进行分组,然后再对 money 进行统计。

也就是说 GROUP BY 语句执行完成后可以满足用户想要的任何一个分组以及分组组合的聚合信息值。

这里需要注意一点,不能同时使用 ORDER BY 字句对结果进行排序,ROLLUP 和 ORDER BY 是互斥的。

            </div>

  1. ...
  2. xyz
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
存储 开发框架 JSON
区块链开发必备的9个Rust包
Rust是新一代的潜力巨大的开发语言。本文编辑整理了9个主流的用于以太坊、比特币、tendermint、eosio、polkadot等区块链开发的Rust包,可用于区块链应用的快速开发。
2427 0
|
JSON 自然语言处理 数据可视化
如何用Elasticsearch实现Word、PDF,TXT文件的全文内容检索?
如何用Elasticsearch实现Word、PDF,TXT文件的全文内容检索?
如何用Elasticsearch实现Word、PDF,TXT文件的全文内容检索?
|
负载均衡 前端开发 Java
SpringCloud之Nacos配置管理、Feign、Gateway服务网关(三)
SpringCloud之Nacos配置管理、Feign、Gateway服务网关(三)
1236 0
SpringCloud之Nacos配置管理、Feign、Gateway服务网关(三)
|
存储 传感器 机器学习/深度学习
树莓派踩坑备忘录 --使用Linux
树莓派踩坑备忘录 --使用Linux
381 0
树莓派踩坑备忘录 --使用Linux
|
机器学习/深度学习 存储 人工智能
可视化机器学习实验指标和超参数的最佳工具(Neptune)
根据关键指标评估模型是了解模型质量的关键第一步。 跟踪超参数和相应的评估指标很重要,因为超参数的微小变化有时会对模型质量产生很大影响。 因此,了解哪些超参数有影响,哪些不影响评估指标可以带来有价值的见解。 这就是为什么您应该可视化这些参数对您的指标的影响,并了解您在所有 ML 实验中的模型性能如何。 为了帮助您,我收集了一份推荐工具列表,这些工具将为您完成繁琐的工作。 以下是可视化机器学习实验指标和超参数的六种工具。
|
设计模式 存储 安全
Jetpack 系列(12)—— OnBackPressedDispatcher:Jetpack 处理回退事件的新姿势
Jetpack 系列(12)—— OnBackPressedDispatcher:Jetpack 处理回退事件的新姿势
623 0
Jetpack 系列(12)—— OnBackPressedDispatcher:Jetpack 处理回退事件的新姿势
|
人工智能 开发框架 运维
阿里云视频云推出低代码音视频工厂vPaaS: 包含“一个云原生开发平台+N个音视频业务场景”为企业提供音视频开发最短路径
阿里云视频云凭借阿里巴巴卓越的技术能力和生态体系,以及自身沉淀了13年的行业经验,正在着力打造云端一体的数智化音视频能力,构建全场景的产品矩阵和全链路的音视频服务,助力多行业的数智化转型和多产业的数智化升级,实现全民共享、技术普惠,助力云上创新、价值创造。
1634 1
阿里云视频云推出低代码音视频工厂vPaaS: 包含“一个云原生开发平台+N个音视频业务场景”为企业提供音视频开发最短路径
|
运维 监控 数据可视化
高德打车构建可观测性系统实践
互联网工程的高速发展,分布式、微服务、容器化架构的流行,互联网已全面进入云原生时代。构建系统的方式由最初的单体大应用演变为分布式架构,一台服务器可能仅存几小时甚至几分钟,这种复杂性大大增加了把系统运行状态可视化的难度。
高德打车构建可观测性系统实践