MySQL 8.0版本新特性 -WITH

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL 8.0版本新特性 -WITH

MySQL中的WITH表示子查询,可以用来简化复杂的嵌套查询。WITH的基本语法如下:

sql

WITH cte_name AS (

   SELECT ...

)

SELECT * FROM cte_name;


这里,cte_name是定义的子查询名称。WITH子句中的查询可以在外部查询中通过名字进行引用,避免重复编写子查询。例如:

sql

WITH t1 AS (

 SELECT col1, col2 FROM table1

)

SELECT t1.col1, t2.col1

FROM t1 JOIN table2 t2

ON t1.col2 = t2.col2


这里定义了名为t1的子查询,然后外部查询引用t1,进行连接查询。使用WITH可以使查询更清晰易读,尤其是多个层级的嵌套查询。它在MySQL 8.0版本里才开始支持。需要注意的是,CTE仅在单个查询中使用,执行完毕后就会释放,不会保存。WITH不像视图那样可以持久化。 


---------------------------------WITH和视图的区别-------------------------------

WITH和视图的主要区别如下:

1、作用范围不同- WITH中的子查询仅在该语句内生效,执行后会释放。- 视图在数据库中创建后持久存在,可以在多个语句中使用。

2、定义时是否执行- WITH在定义时不会执行,只有在查询时才会执行一次。- 视图在创建时会执行其SQL语句,建立起可查询的虚拟表。

3、是否物化- WITH的结果集仅在语句执行时生成,不会物化。- 视图会将查询的结果集存储或缓存,是“物化”的。

4、是否可以更新- WITH中的子查询不可以进行更新。- 视图若干条件下可以进行更新、插入等操作。所以两者主要区别在于作用范围和物化的程度。WITH适合临时替代重复子查询,视图更适合Persistent的场景。WITH在定义时不会执行,只在引用时运算一次,不会存储结果集。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
JSON 关系型数据库 MySQL
MySQL 8.0 新特性
MySQL 8.0 新特性
116 10
MySQL 8.0 新特性
|
6天前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
41 1
|
1月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
202 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
14天前
|
SQL JSON 关系型数据库
MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
【10月更文挑战第3天】MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
65 5
|
14天前
|
SQL 安全 关系型数据库
MySQL8.2有哪些新特性?
【10月更文挑战第3天】MySQL8.2有哪些新特性?
28 2
|
1月前
|
关系型数据库 MySQL 数据库
MySQL高级篇——MVCC多版本并发控制
什么是MVCC、快照读与当前读、隐藏字段、Undo Log版本链、ReadView、举例说明、InnoDB 解决幻读问题
MySQL高级篇——MVCC多版本并发控制
|
1月前
|
监控 关系型数据库 MySQL
如何升级mysql的版本
如何升级mysql的版本
260 2
|
1月前
|
存储 监控 关系型数据库
如何升级MySQL版本?
如何升级MySQL版本?
68 2
|
2月前
|
关系型数据库 MySQL Shell
MySQL数据库一键安装脚本,适合任何版本
MySQL数据库一键安装脚本,适合任何版本
54 2
|
2月前
|
关系型数据库 MySQL Linux
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
这篇文章提供了在Linux系统中使用Docker安装Mysql 5.7版本的详细过程和图解,包括安装指定版本、创建实例、启动、使用Navicat连接测试、文件挂载与端口映射、进入容器、配置文件修改以及重新启动容器等步骤。
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】