今天看啥  ›  专栏  ›  keep丶

鲜为人知的MySQL语法介绍

keep丶  · CSDN  ·  · 2020-12-10 10:16

版权说明: 本文由博主 keep丶 原创,转载请注明出处。
原文地址: https://blog.csdn.net/qq_38688267/article/details/110916171

本文介绍一些MySQL中比较鲜为人知的语法,我们直接步入正题:

<=> 比较符

>、<、<>、<=、>= 都很常见,但你知道 <=> 吗?他的语法如下:

  • column <=> 'VALUE' <=> 等价于 = ,等价于 column = 'VALUE'
    在这里插入图片描述
    在这里插入图片描述
  • column <=> NULL ,等价于 column IS NULL
    在这里插入图片描述
  • NULL <=> NULL ,返回值为 1 NULL = NULL 的返回值为 NULL
    在这里插入图片描述

简单来说, <=> 就是加强版的 = ,区别就是 NULL = NULL 的返回值为 NULL ;而 NULL <=> NULL 的返回值为 1 ,或者说为 TRUE
在这里插入图片描述

SAVEPOINT 语法

savepoint 保存点,是用于事务中,我们可以在事务执行过程中创建保存点,然后回滚的时候可以回滚到指定保存点。

-- 开启事务
BEGIN;
-- update_by 改成 1
update sys_dict set update_by = 1 where id = 1;
-- 添加保存点
SAVEPOINT p1;
-- update_by 改成 2
update sys_dict set update_by = 2 where id = 1;
-- 回滚到保存到p1的状态
ROLLBACK TO p1;
-- 查询数据,返回值为 1
select update_by from sys_dict where id = 1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

ANY()/SOME()、ALL()

ANY()、SOME()、ALL() 算是比较冷门的语法了, 它们只支持在用于包含子查询 ,其中 ANY() SOME() 是同义词,所以就不分别介绍 ANY() SOME() 了,语法如下:

  • column > ANY(1,2,3) ,表示大于其中一个即可,即大于其中最小值即可, 等价于 column > 1
    column > ALL(1,2,3) ,表示要大于其中所有值,即需要大于其中最大值, 等价于 column > 3

  • column = ANY(1,2,3) ,等价于 column IN (1,2,3)

  • column <> ALL(1,2,3) ,等价于 column NOT IN (1,2,3)

在这里插入图片描述
更多详情请参见: MySQL官方文档-带有ANY,IN或SOME的子查询

->、->> 表达式

这两个表达式也很少见,因为很少有人用MySQL的 JSON 数据类型。其中 -> 是MySQL5.7中加入的, ->> 是MySQL8.0加入的。这个我们直接结合栗子来看:
在这里插入图片描述
-> 等价于 JSON_EXTRACT() ,而 ->> 等价于 JSON_UNQUOTE(JSON_EXTRACT()) ,区别就是 -> 的返回值的字符串还会带 "" ,而 ->> 的返回值的字符串没有。
在这里插入图片描述

总结

暂时只想到这些,后续有新的比较好用又鲜为人知的会继续更新。

MySQL8.0新出了很多新东西,知道的人也不多,比如 公共表表达式WITH OVER、WINDOW窗口函数 、8.0.19出的 TABLE 语法 等,这些在一定场景下都特别好用,我就不一一介绍了,感兴趣的同学可以自行百度。

介绍了这么多,有人可能觉得这些有什么用呢?我只是希望能给大家留下一些映像,当遇到对应需求的时候,能够想到还有这种解决方案。因为只有你知道有这么个东西,你才可能用得上,如果你都不知道有这么个东西,那么你肯定用不上!

希望本博客对大家有所帮助或启发,觉得写得不错的同学可以点赞支持一下哦~




原文地址:访问原文地址
快照地址: 访问文章快照