谈谈MySQL的黑暗语法
【MySQL在SQL标准下实现了自己的一套SQL语句】
每种数据库都会在继承标准SQL的基础上有所发展,比如SQL-SERVER在这个基础之上发展出来的SQL“方言”就叫“T-SQL”,MySQL
发民出来的这套方言就没有名字了,不过他里面也是饱含了许多“黑话”的,比如说“show xxxx;”
【黑暗语法一:from dual】
select查询是可以直接用于计算的比如我想算一下 “1 + 1 = 2”就可以这样
select 1 + 1;
+-------+
| 1 + 1 |
+-------+
| 2 |
+-------+
1 row in set (0.00 sec)
但是如果真的有人那么的“死板”,硬要要求你们的每一个select语句都要有一个from子句的话,那么你就可以用from dual来满足他
select 1 + 1 from dual;
+-------+
| 1 + 1 |
+-------+
| 2 |
+-------+
1 row in set (0.00 sec)
也就是说“from dual”是MySQL的黑话之一,“from dual”会被MySQL忽略掉的。
【黑暗语法二:--<空格> 注释】
MySQL有一种行内注释语法“-- ”用中文来描述就是“两个连续的减号后面加上空格或换行”,反正说也说不太明白,还是直接来看一下效果吧
select 1 + 1; -- select 2 + 2;
+-------+
| 1 + 1 |
+-------+
| 2 |
+-------+
1 row in set (0.00 sec)
可以看到 “-- ”后面的“select 2 + 2;”被MySQL当成注释了;不过这个有一个比较坑的地方,就是“--”后面要有空格(或换行)才算是注释,注意
了是一定要有“空格”才行
1): 说一下为什么要有空格才行
数学经过许多年的发展人类逐步认识到了“整数”,“小数”,“负数” ... ... 之于为什么注释一定要有空格就是因为“负数”,还是以“1 + 1 = 2”的例子
数学上还另一个写法,就是“负负得正”
select 1--1;
+------+
| 1--1 |
+------+
| 2 |
+------+
1 row in set (0.00 sec)
所以呀为了于“两次取负”相区分,MySQL会以“有没有空格”来区分“是不是注释”!
【黑暗语法三:多行注释】
这里想说MySQL的多行注释也有在标准SQL上做一些扩展,所以说“MySQL多行注释”也是鬼的一B,我们来看一下在正常的多行注释
select 1 + /* 这是一行不起眼的注释 */ 1;
+--------+
| 1 + 1 |
+--------+
| 2 |
+--------+
1 row in set (0.00 sec)
可以看到MySQL表现的和预期一样、MySQL多行注释牛逼的地方在、它可以把它适应MySQL版本,既然要说的与MySQL版本相关的注释,
那么我交代一下自己的MySQL版本
select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.11 |
+-----------+
1 row in set (0.00 sec)
可以看到我这里用的是mysql-8.0.11,我们可以通过注释来限定与版本相关的逻辑(当我的MySQL版本大于等于MySQL-8.0.11时就自动加个一个“2”)
select 1 + /*!80011 2 + */ 1;
+--------------+
| 1 + 2 + 1 |
+--------------+
| 4 |
+--------------+
1 row in set (0.00 sec)
看到了吧、它自己加了个“2”上去,为了对比我们看一下把版本号限制到8.0.14之上版的情况
select 1 + /*!80014 2 + */ 1;
+--------+
| 1 + 1 |
+--------+
| 2 |
+--------+
1 row in set (0.00 sec)
可以看到由于版本号太低所以“+2”的这个逻辑就没有上去。
【参考文档】
'--' as the Start of a Comment
【学习交流】
-----------------------------http://www.sqlpy.com-------------------------------------------------
-----------------------------http://www.sqlpy.com-------------------------------------------------
谈谈MySQL的黑暗语法的更多相关文章
- 谈谈MySQL数据表的类型(转)
谈谈MySQL数据表的类型 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其 ...
- MySQL创建索引语法
1.介绍: 所有mysql索引列类型都可以被索引,对来相关类使用索引可以提高select查询性能,根据mysql索引数,可以是最大索引与最小索引,每种存储引擎对每个表的至少支持16的索引.总索引长度为 ...
- MYSQL整理的语法
MYSQL整理的语法 http://www.cnblogs.com/suoning/p/5744849.html
- MySQL的一些语法总结
初学MySQL,今天遇到了一个问题,然后汇总了一下MySQL的一些语法 1. date和datetime类型是不同的 date只记录日期(包括年月日),datetime记录日期和时间(包括年月日时分秒 ...
- sql点滴41—mysql常见sql语法
原文:sql点滴41-mysql常见sql语法 ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename ...
- 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种 ...
- MySQL中show语法使用总结
MySQL中 show 语法的使用: 先查看MySQL版本信息: mysql> select version(); +------------+ | version() | +--------- ...
- (转)MySQL中show语法
MySQL中show语法 1. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称. 2. show databases; -- ...
- 谈谈MySQL中的锁
谈谈MySQL中的锁 锁的定义 在生活中锁的例子就非常多了,所以应该很容易理解锁的含义.在计算机领域,可以这样来概述,锁是计算机协调多个进行进程并发访问某一资源的机制. 在数据库中,锁也是一个 ...
随机推荐
- MySQL 数据类型的简单选择
选择合适的数据类型:char和varchar: +---------+------------+ | char(6) | varchar(6) | +---------+------------+ | ...
- Aerospike系列:4:简单的增删改查aql
[root@localhost bin]# aql --help Usage: aql OPTIONS OPTIONS -h <host> The hostname to the serv ...
- sqlserver查询的结果复制到excel替换掉回车换行
从sqlserver查询统计出的结果复制到excel,如果有回车,换行 ,或回车换行 ,复制到excel显示会乱会错版,查询的时候就替换掉回车换行,复制出来就不会乱了 ) ), ),),'') fro ...
- Linux 混合编译opencv与opencv_contrib的android版本
一.该方法只能编译.a文件 使用该脚本:https://github.com/tzutalin/build-opencv-for-android $ git clone https://github. ...
- Linq to Entity 求最大小值Max/Min返回null的处理方法
var maxId=db.user.Select(u=>u.CId).DefaultIfEmpty() 如果maxId返回null则maxId.Max()的值为0
- cocos2d-js 和 createjs 性能对比(HTML5)
cocos2d-js除了做native游戏外,还可以用来做HTML5游戏/动画,那么它跟adobe的createjs框架比较会怎么样呢? (背景知识:createjs是adobe支持的HTML5框架, ...
- 〖Linux〗使用纯命令行来操作VBOX(宿主机不需要X11 Server)
1. Linux安装vbox,略过 2. 查看已安装扩展插件 VBoxManage list extpacks 3. 创建一个vm: VBoxManage createvm --name " ...
- log4j的详细配置(最省心完美配置)
先说下我的需求 1,可以记录日记在我们的java开发项目周期中: 2,很简单即可输出日志: 3,每天按照时间将不同的日志输出到不同的文件中,每天输出日志到一个带有当前时间戳的文件中: 4,可以修改当前 ...
- python3 数据库查询
#xiaodeng #python 3 #数据库查询 #第一种方法(fethall,返回所有行数据) import pymysql #connect链接服务器,注意和服务库编码一致 conn=pymy ...
- ubuntu中查看各种设备和资源的命令汇总
一.系统信息 1.查看内核信息: $uname -a 2.查看操作系统版本: ...