前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >"--"注释在Oracle和MySQL下的区别

"--"注释在Oracle和MySQL下的区别

作者头像
bisal
发布2022-11-02 17:52:42
1.1K0
发布2022-11-02 17:52:42
举报

GreatSQL技术社区推送的这篇文章《"--"注释在Oracle和MySQL下的区别》,介绍了Oracle和MySQL两种数据库中"--"注释的区别。

服务端

Oracle中语句注释符--之后的所有语句内容都会被当作注释,

代码语言:javascript
复制
SQL> SELECT 1,
  2  --1,
  3  1
  4  FROM DUAL;

        1            1
---------- ----------
        1            1

SQL> SELECT 1,
  2  -- 1,
  3  1
  4  FROM DUAL;

        1            1
---------- ----------
        1            1

MySQL中语句注释符--之后只有在跟随空格(--)时才被当作是注释符,否则会与其后的字符串当作表达式处理,

代码语言:javascript
复制
[MySQL]> SELECT 1,
  -> --1,
  -> 1
  -> FROM DUAL;
  +---+-----+---+
  | 1 | --1 | 1 |
  +---+-----+---+
  | 1 |   1 | 1 |
  +---+-----+---+

  [MySQL]> SELECT 1,
      -> -- 1,
      -> 1
      -> FROM DUAL;
  +---+---+
  | 1 | 1 |
  +---+---+
  | 1 | 1 |
  +---+---+

客户端

SQL*Plus中将语句结束符;之前的所有语句内容作为一条SQL语句提交给服务器进行处理,因此会产生以下现象:

代码语言:javascript
复制
SQL> SELECT --t.b FROM test_comment t;
    SELECT --t.b FROM test_comment t
                                  *
    ERROR at line 1:
    ORA-00936: missing expression

  SQL> select   
    2  a, b from test_comment --comments;
    
    A     B
  ---------- ----------
    0     1
    3     4

第一条语句中,即使;位于--之后,但在SQL*Plus中并不会将其视为注释的一部分,而是仍然将其视为语句结束符,所以将SELECT --t.b FROM test_comment t提交服务器处理,服务器处理语句会将这个--之后的内容都当作注释处理,因此,这条语句在服务器看来只有SELECT关键字,所以报错。第二条语句同理,但由于--之前包含了完整且合法的语句select a,b from test_comment,所以服务器可以正常处理,

代码语言:javascript
复制
官方手册说明:Notes on Placing Comments

MySQL客户端虽然也是将语句结束符;之前的所有语句内容作为一条SQL语句交给服务器进行处理,但比较特殊的是MySQL客户端会将--注释中的;当作是注释的一部分而不是语句结束符。

注意:在MySQL客户端中,--后面跟随空格(--)才被当作是注释符,否则会与其后的字符串会被当作表达式处理,例如,

代码语言:javascript
复制
[MySQL]> SELECT 1,
-> --1,
-> 1
-> FROM DUAL;
+---+-----+---+
| 1 | --1 | 1 |
+---+-----+---+
| 1 |   1 | 1 |
+---+-----+---+

[MySQL]> SELECT 1,
    -> -- 1,
    -> 1
    -> FROM DUAL;
+---+---+
| 1 | 1 |
+---+---+
| 1 | 1 |
+---+---+

由于对--的处理存在两种解释的可能,所以导致MySQL可能在处理语句结束符;时也有两种解释:

  1. --注释之后的语句结束符:由于语句结束符在注释中被当作注释处理,所以MySQL客户端在处理这种语句结束符时并不会将前面的语句提交给服务器处理。
  2. --表达式之后的语句结束符:这种情况就按默认处理,将语句结束符 ; 之前的所有语句内容提交给服务器进行处理。

示例,

代码语言:javascript
复制
root@mysqldb 10:54:  [test]> SELECT --1;
+-----+
| --1 |
+-----+
|   1 |
+-----+
1 row in set (0.00 sec)

root@mysqldb 10:54:  [test]> SELECT -- 1;
    -> 2;
+---+
| 2 |
+---+
| 2 |
+---+
1 row in set (0.00 sec)

另外,在MTR脚本中的情况是SQL*Plus和MySQL客户端两种处理方式的结合,即:--之后的所有内容才表示为注释,但遇到语句结束符;则提交服务器处理。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 服务端
  • 客户端
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档