MySQL8的新特性CTE
【瞎BB】
十一长假的最后一天,想到明天要就回去上班了;内心的激动无法用平常的言语来表达,可能是国人的感情向来比较内敛(这个锅不能我一个人背)
也可能是我们比较重行动(Just Do IT)。但... 我还是有写一些什么东西的必要得,那我今天就写两点吧!
1): 趁着十一长假还没有过去,我在这里给大家拜个早年
2): 讲讲MySQL-8.0.x的新特性(公共表表达式)CTE
【CTE有什么牛逼的地方】
1、从SQL的写法上看逻辑更加清晰
2、直接递归
【CTE的语法格式】
CTE的主要思想就先生成临时结果集,以方便后面的使用;与临时表不同的是这个结果集的作用域不是当前session而是当前语句,对!不是
session级是语句级别的
with_clause:
WITH [RECURSIVE]
cte_name [(col_name [, col_name] ...)] AS (subquery)
[, cte_name [(col_name [, col_name] ...)] AS (subquery)] ...
【例子一:朴素使用场景】
假设我们有一个Person表用来保存一些自然人的信息
create table person(id int not null auto_increment primary key,name varchar(16));
insert into person(name) values('Tom'),('Jry'),('Bob'),('Foo'),('Bar');
select * from person;
+----+------+
| id | name |
+----+------+
| 1 | Tom |
| 2 | Jry |
| 3 | Bob |
| 4 | Foo |
| 5 | Bar |
+----+------+
5 rows in set (0.00 sec)
如果我们要查询id可以被2整除的那些行,通常我们可以这样写SQL
select name from person where id % 2 = 0;
+------+
| name |
+------+
| Jry |
| Foo |
+------+
2 rows in set (0.00 sec)
如果出于某种不可描述的压力,一定要让你用CTE表达式来写的话,你也可以样混过去
with ct(name) as (select name from person where id % 2 = 0) select name from ct;
+------+
| name |
+------+
| Jry |
| Foo |
+------+
2 rows in set (0.00 sec)
事实上CTE不只是可以用于select语句中,update,delete,insert也都是支持的,你只要知道CTE代表的是一个结果集就好了,通常就
不会用错。
还是出现某种不可描述的压力,要把所有id可以被2整除的公民的name改成"Hello SQL",CTE要硬上了哈!
with ct(id) as (select name from person where id % 2 = 0) update person,ct set person.name="Hello SQL" where person.id = ct.id;
Query OK, 2 rows affected (0.08 sec)
Rows matched: 2 Changed: 2 Warnings: 0 select * from person;
+----+-----------+
| id | name |
+----+-----------+
| 1 | Tom |
| 2 | Hello SQL |
| 3 | Bob |
| 4 | Hello SQL |
| 5 | Bar |
+----+-----------+
5 rows in set (0.00 sec)
【例子二:递归场景】
还是直接上比较学院派的例子吧、反正牛逼的我也想不出来!直接生成一个斐波那契数列吧!
mysql> with recursive fib as (
-> select 0 as x, 1 as y
-> union all
-> select
-> fib.y as x,
-> fib.x+fib.y as y
-> from fib where fib.x < 20)
-> select y as n from fib;
+------+
| n |
+------+
| 1 |
| 1 |
| 2 |
| 3 |
| 5 |
| 8 |
| 13 |
| 21 |
| 34 |
+------+
9 rows in set (0.00 sec)
【参考文档】
WITH Syntax (Common Table Expressions)
【学习交流】
-----------------------------http://www.sqlpy.com-------------------------------------------------


-----------------------------http://www.sqlpy.com-------------------------------------------------
----
MySQL8的新特性CTE的更多相关文章
- 跨时代的MySQL8.0新特性解读
目录 MySQL发展历程 MySQL8.0新特性 秒级加列 性能提升 文档数据库 SQL增强 共用表表达式(CTEs) 不可见索引(Invisible Indexes) 降序索引(Descending ...
- MySQL8.0新特性实验1
Server层,选项持久化 mysql> show variables like '%max_connections%';+------------------------+-------+| ...
- mysql8.0 新特性,对json类型的常用操作
mysql8 新特性-json数据类型操作 -- 根据key(可多个)获取value SELECT JSON_EXTRACT('{"id": 14, "name" ...
- Mysql8.0新特性【详细版本】
1. 账户与安全 用户创建与授权 之前:创建用户并授权 1 grant all privileges on *.* to 'myuser'@'%' identified by '3edc#EDC'; ...
- 深入解读MySQL8.0 新特性 :Crash Safe DDL
前言 在MySQL8.0之前的版本中,由于架构的原因,mysql在server层使用统一的frm文件来存储表元数据信息,这个信息能够被不同的存储引擎识别.而实际上innodb本身也存储有元数据信息.这 ...
- MySQL-08 MySQL8.0新特性
性能 MySQL 8.0 在一定的用户访问条件下,速度要比 MySQL 5.7 快 2 倍.MySQL 8.0 在以下方面带来了更好的性能:读/写工作负载.IO 密集型工作负载.以及高竞争(" ...
- MySQL8.0新特性总览
1.消除了buffer pool mutex (Percona的贡献) 2.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe.metadata管理更完善(可以利用ibd2s ...
- MySQL8的新特性ROLE
[MySQL的ROLE解决了什么问题] 假设你是一个职业素养良好的DBA比较同时又比较注重权限管理的话:可能遇到过这样的问题,数据库中有多个开发人员的账号:有一天要建 一个新的schema,如果你希望 ...
- MySQL8.0 新特性 Hash Join
概述&背景 MySQL一直被人诟病没有实现HashJoin,最新发布的8.0.18已经带上了这个功能,令人欣喜.有时候在想,MySQL为什么一直不支持HashJoin呢?我想可能是因为MySQ ...
随机推荐
- 用 bottle.py 写了个简单的升级包上传
可以当作一个 demo 来玩吧,在这里分享一下.里面涉及的内容包含了文件上传,cookie 设置和读取,重定向(redirect). from bottle import run, post, get ...
- Java并发容器——CopyOnWriteArrayList
CopyOnWriteArrayList是“读写分离”的容器,在写的时候是先将底层源数组复制到新数组中,然后在新数组中写,写完后更新源数组.而读只是在源数组上读.也就是,读和写是分离的.由于,写的时候 ...
- C3P0连接池使用教程
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6405861.html 在项目中的应用见: https://github.com/ygj0930/Coupl ...
- Java泛型的PECS原则
1.什么是PESC ? PESC = producer-extens , consumer -super. 如果参数化类型表示一个 T 生产者,就使用 <? extends T>: 如果 ...
- Java通过join方法来暂停当前线程
目标线程的join方法暂停当前线程,直到目前线程完成(从run()方法返回). Java代码: package Threads; import java.io.IOException; /** * C ...
- 在spring boot微服务中使用JWS发布webService
发布时间:2018-11-22 技术:Java+spring+maven 概述 在springboot微服务中使用JWS发布webService,在服务启动时自动发布webservice接口. ...
- JS正则替换掉小括号及内容
正則表達式:\ ( [ ^ \ ) ] * \ ) JS代码: var str="hello(world)"; var nstr = str.replace(/\([^\)]*\) ...
- ubuntu_thunder
Thunder 出自Ubuntu中文 File:Http://forum.ubuntu.org.cn/download/file.php?id=123020&mode=view/wine-th ...
- javascript中的复制
github 深度复制这个问题看似简单,实际上要想完美实现需要很多知识. 需要考虑Set,Map,Promise等类型的对象 这个库简洁明了,是一个小巧玲珑的JS库 Promise简单例子 funct ...
- [转]最好用的 AI 开源数据集 Top 39:NLP、语音等 6 大类
原文链接 本文修正部分错误. 以下是精心收集的一些非常好的开放数据集,也是做 AI 研究不容错过的数据集. 标签解释 [经典]这些是在 AI 领域中非常著名.众所周知的数据集.很少有研究者或工程师没有 ...