【瞎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));如果我們要查詢id可以被2整除的那些行,通常我們可以這樣寫sqlinsert 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)
select name from person where id % 2 = 0;如果出於某種不可描述的壓力,一定要讓你用cte表示式來寫的話,你也可以樣混過去+------+
| name |
+------+
| jry |
| foo |
+------+
2 rows in set (0.00 sec)
with ct(name) as (select name from person where id % 2 = 0) select name from ct;事實上cte不只是可以用於select語句中,update,delete,insert也都是支援的,你只要知道cte代表的是乙個結果集就好了,通常就+------+
| name |
+------+
| jry |
| foo |
+------+
2 rows in set (0.00 sec)
不會用錯。
還是出現某種不可描述的壓力,要把所有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)
MySQL 8 新特性介紹
原文 what s new in mysql 8.0mysql是眾多 技術棧中的標準配置,是廣受歡迎的開源資料庫,已經推出了8.0的第乙個候選發行版本。mysql 8.0的新特性包括 根據mysql的策略 乙個新的 一般 版本發布的週期是18 24個月 mysql並沒有承諾mysql 8.0的發布日...
MySQL 8的關鍵新特性
mysql的第八個版本蓄勢待發,並有望於2018年發布。在mysql 5.7.9的首個通用版本推出後的28個月內,mysql 8發布了從8.0.0到8.0.4這五個候選版本。這些發布候選僅針對開發使用,而不應該生產系統中使用。因為這些候選版並不支援版本公升級,使用者可能會碰上候選版與一般可用 ga ...
MySQL 8的關鍵新特性
mysql的第八個版本蓄勢待發,並有望於2018年發布。在mysql 5.7.9的首個通用版本推出後的28個月內,mysql 8發布了從8.0.0到8.0.4這五個候選版本。這些發布候選僅針對開發使用,而不應該生產系統中使用。因為這些候選版並不支援版本公升級,使用者可能會碰上候選版與一般可用 ga ...