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 ...
随机推荐
- python unittest case运行失败重试
因为使用unittest进行管理case的运行.有时case因为偶然因素,会随机的失败.通过重试机制能够补充保持case的稳定性.查阅资料后发现,python的unittest自身无失败重试机制,可以 ...
- HTML5开发之获取设备的地理坐标
近期一段时间開始学一下html5,发现里面有好多的知识还是蛮新颖的.所以整理了一下自己练习过的demo给大家分享下,以下的代码是通过js接口获取当前的地理坐标. <!doctype html&g ...
- 算法笔记_203:第四届蓝桥杯软件类决赛真题(C语言B组)
目录 1 猜灯谜 2 连续奇数和 3 空白格式化 4 高僧斗法 5 格子刷油漆 6 农场阳光 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 猜灯谜 标题:猜灯谜 A 村的元宵节灯会上有一迷题: ...
- bat 十进制转16进制
@echo offset code=0123456789ABCDEF:enterset /p num=输入你要转换的十进制数字:echo %num%|findstr "[^0-9]" ...
- 〖Linux〗实时更新 hosts 文件的脚本
适用场景: 下载了一个smarthosts的hosts文件,但hosts文件过旧导致一些ip地址已失效无法访问网络. 脚本使用: ./hostsupdate # 直接从 /etc/hosts 中获得需 ...
- django之创建第4-2个项目-访问class类属性和类方法
1.修改index <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 转 解决configure: error: Please reinstall the libcurl distribution
今天配置一台server的php支持curl的时候, 出现如下报错 checking for cURL in default path... not foundconfigure: error: Pl ...
- linux写环境变量对字符转义
之前在配置oracle环境换了或者jdk环境,用脚本初始化配置,发现$JAVA_HOME被真实路径取代,这不操蛋吗,今天无意间发现echo -e可以转义特殊字符 得之兴业,岁在今朝! 对oracle ...
- oracle安装后sqlnet.ora文件
# sqlnet.ora Network Configuration File: D:\Develop\oracle11g\product\11.2.0\dbhome_1\network\admin\ ...
- java struts2入门学习---常用标签学习总结
jsp页面中引入标签: <%@ taglib uri="/struts-tags" prefix="s"%> 常用标签知识点总结: <s:fi ...