【发布时间】:2013-07-07 09:41:59
【问题描述】:
根据documentation,在MySql中有两种方式可以对行尾进行注释:
"#""-- "
这些有什么区别吗?
如果是这样,我应该什么时候使用一个与另一个?
如果没有,有谁知道为什么两者都支持?
对我来说似乎很奇怪,尤其是当连字符版本仍然与标准 SQL Syntax 略有不同时。
【问题讨论】:
根据documentation,在MySql中有两种方式可以对行尾进行注释:
"#""-- "这些有什么区别吗?
如果是这样,我应该什么时候使用一个与另一个?
如果没有,有谁知道为什么两者都支持?
对我来说似乎很奇怪,尤其是当连字符版本仍然与标准 SQL Syntax 略有不同时。
【问题讨论】:
只有当您希望您的 SQL 具有可移植性时才真正重要。例如 -- cmets 在 Sqlite 和 Postegresql 中是可以的,而 # 不是。最好的办法是使用--,后面有一个空格。 (据我所知,我几乎从未见过其他任何东西)
【讨论】:
正如您提供的链接清楚地解释它-- 是标准的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)
【讨论】:
Oracle 和 SQL Server(以及 DB2 和其他)都支持 -- 和 /* */(多行)注释标准。因此在 MySQL 中使用相同的样式是一个好习惯,因为您可能会遇到在多个环境中编程的情况。
在 -- 之后需要一个空格是 MySQL 的一个奇怪之处,但这并不是什么大问题,因为它有助于清晰。
当然,如果您使用大量 perl 和 MySQL,那么您可能会出于类似原因选择 # 注释...
【讨论】: