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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 这篇文章我们来了解一下 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

  • 同样的,$ 会在末尾处进行匹配,如下所示
select 'aaaabbbccc' regexp 'c$';

微信图片_20220418193303.png

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

微信图片_20220418193306.png

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

微信图片_20220418193310.png

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

微信图片_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 是互斥的。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
人工智能 关系型数据库 MySQL
细节爆炸!腾讯用13个案例实战讲明白MySQL,没想到这么全
MySQL MySQL的数据类型有很多种,选择正确的数据类型对于获得高性能特别地重要。MySQL作为应用最广泛、最流行的开源数据库之一,MySQL数据库软件已经广为人知了,MySQL的衍生技术百花齐放,拓展架构异彩纷呈。尤其是在性能优化及高可用架构两方面,很多从业多年的DBA限于生产环境的固定体系,往往都是盲人摸象,难窥全局! 当前很火的Facebook、腾讯、淘宝等大型网站都在使用MySQL的数据库。在最近的二十年,我们也目睹了云计算、大数据、物联网、区块链、5G、人工智能、数字化转型等都有多种浪潮的冲击。而且一些技术随着热潮的褪去也降低了热度,;另一些技术在多次冲刷与洗礼中屹立不倒,
809 5
|
11月前
|
SQL 存储 关系型数据库
认真学习MySQL中游标与实例分析
认真学习MySQL中游标与实例分析
79 0
|
SQL 关系型数据库 MySQL
深聊MySQL,从入门到入坟之:如何让order by、group by查询速度飞起来
深聊MySQL,从入门到入坟之:如何让order by、group by查询速度飞起来
123 0
|
SQL 关系型数据库 MySQL
MySQL之程序猿得“爱恨情仇“--(增删查改等MySQL基本操作)(上)
MySQL之程序猿得“爱恨情仇“--(增删查改等MySQL基本操作)(上)
|
SQL 关系型数据库 MySQL
MySQL之程序猿得“爱恨情仇“--(增删查改等MySQL基本操作)(下)
MySQL之程序猿得“爱恨情仇“--(增删查改等MySQL基本操作)(下)
|
SQL 存储 自然语言处理
42 张图带你撸完 MySQL 优化 下
42 张图带你撸完 MySQL 优化 下
118 0
42 张图带你撸完 MySQL 优化  下
|
SQL 存储 关系型数据库
42 张图带你撸完 MySQL 优化 上
42 张图带你撸完 MySQL 优化 上
93 0
42 张图带你撸完 MySQL 优化  上
|
SQL 存储 关系型数据库
42 张图带你撸完 MySQL 优化 中
42 张图带你撸完 MySQL 优化 中
127 0
42 张图带你撸完 MySQL 优化  中
|
SQL 关系型数据库 MySQL
深聊MySQL,从入门到入坟之:如何优化数据导入?
深聊MySQL,从入门到入坟之:如何优化数据导入?
204 0
深聊MySQL,从入门到入坟之:如何优化数据导入?
|
SQL 数据采集 自然语言处理
炸裂!MySQL 82 张图带你飞!(三)
这篇文章我们来了解一下 MySQL 中的高级内容。
106 0
炸裂!MySQL 82 张图带你飞!(三)