MySQL注释语法 - "#"和"--"有什么区别?

8
根据文档,在MySql中有两种方法可以在行末添加注释:

  • "#"
  • "-- "

这两者之间有什么区别吗?

如果有,那我应该在什么情况下使用其中之一?

如果没有区别,是否有人知道为什么两者都被支持?

对我来说似乎有些奇怪,特别是连字符版本仍然与标准的SQL语法略有不同。


1
#和--的区别很重要的一个例子 - Dan L.
3个回答

12

只有在您希望使SQL具有可移植性时才真正重要。例如,-- 在 Sqlite 和 Postegresql 中是可以接受的注释符号,而 # 则不行。最好使用带有空格的 --。(就我所知,几乎没有其他用法)


很多数据库也支持 /* 块注释 */,但最好使用 -- 以实现可移植性。 - Neil Wightman

6
作为您提供的链接清楚地解释了,--是标准的SQL“注释分隔符”。MySQL与标准不同之处在于要求在--后面加上空格才能被识别为注释。 "标准" SQL 不要求这样做。
为了举例说明,在下面的代码中,--被识别为注释标记:
mysql> CREATE TABLE T(C int);   -- This is my new table
Query OK, 0 rows affected (0.18 sec)

但是请注意,如果在--后面没有空格,交互式解释器将会表现不正常。
mysql> CREATE TABLE T(C int);   --This is my new table
Query OK, 0 rows affected (0.24 sec)

    -> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '--This is my new table' at line 1

MySQL支持一些其他的注释格式,以适应各种程序员的习惯:#,就像许多脚本语言一样,以及/* ... */,就像C语言一样。令人惊讶的是,// 还没有成为它们的一部分。
mysql> CREATE TABLE T(C int);   /* This is my new table */
Query OK, 0 rows affected (0.22 sec)

mysql> CREATE TABLE T(C int);   # This is my new table
Query OK, 0 rows affected (0.24 sec)

那个空格真的让我很困惑。它似乎是如此武断,你有任何想法为什么他们需要这个空格吗?它是否实际上会与其他东西产生歧义,还是只是一个随意的怪癖? - Twisted Code

0

Oracle和SQL Server(以及DB2和其他数据库)都支持--和/* */(多行)注释标准。因此,在MySQL中使用相同的样式是一个好习惯,因为您可能会遇到在多个环境中编程的情况。

--后需要加空格是MySQL的奇怪之处,但这并不是什么大问题,因为它有助于清晰度。

当然,如果您正在大量使用perl和MySQL,则出于类似原因,您可以选择#注释...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接