版权说明:
本文由博主
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 sys_dict set update_by = 1 where id = 1 ;
SAVEPOINT p1;
update sys_dict set update_by = 2 where id = 1 ;
ROLLBACK TO p1;
select update_by from sys_dict where id = 1 ;
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 语法
等,这些在一定场景下都特别好用,我就不一一介绍了,感兴趣的同学可以自行百度。
介绍了这么多,有人可能觉得这些有什么用呢?我只是希望能给大家留下一些映像,当遇到对应需求的时候,能够想到还有这种解决方案。因为只有你知道有这么个东西,你才可能用得上,如果你都不知道有这么个东西,那么你肯定用不上!
希望本博客对大家有所帮助或启发,觉得写得不错的同学可以点赞支持一下哦~