SQL中是不是需要分号?

Posted

技术标签:

【中文标题】SQL中是不是需要分号?【英文标题】:Is the semicolon necessary in SQL?SQL中是否需要分号? 【发布时间】:2013-09-22 07:44:54 【问题描述】:

如果我忘记了;,有时它仍然有效。但有时并非如此。

而在 JDBC 和 android SQLite 中,我似乎根本不需要;。我很困惑。

什么时候应该使用分号?

【问题讨论】:

***.com/questions/18487082/… 【参考方案1】:

分号表示语句的结束,所以如果有多个语句,那么你应该使用分号,否则它会正常工作。

我通常使用分号作为练习,即使您在 sql 客户端上运行查询,它也很有用,例如如果您在工作表上有多个语句,则在 Sql Developer 中使用分号非常有帮助,因为您可以简单地转到该特定语句并使用 F9 执行该语句,而没有分号这是不可能的。

【讨论】:

在大多数 JDBC 驱动程序中,即使您将分号添加到单独的语句中,它也不起作用... 在单个字符串中执行多个语句是 - 按照规范 - JDBC 不允许【参考方案2】:

如果您一次运行单个查询,则不是强制性的,如果您想使用单个命令运行多个查询,则必须这样做。

然而,在大多数 JDBC 驱动程序中,不可能在单个 JDBC 命令中添加多个用分号分隔的查询,但是它存在允许您添加多个语句的 addBatch 方法:

java.sql.Statement stmt=con.createStatement();   
stmt.addBatch(insert_query1); //insert_query1   
stmt.addBatch(insert_query2); //insert_query2  

根据经验,在 JDBC 中根本不需要分号,如果您需要多个语句,请使用 addBatch

【讨论】:

【参考方案3】:

通常分号不是语句实际语法的一部分(因为大多数数据库内部 API 一次执行一条语句)。相反,分号是“语句结束”标记或语句分隔符,通常在 CLI 或数据库的脚本工具中定义。这允许该工具知道语句何时结束,因此它可以将该单个语句发送到数据库以执行。

另一方面,JDBC API 旨在一次执行一个(!)语句,因此您不需要这样的分隔符(语句是整个字符串)。这意味着不需要分号,并且由于它不是许多数据库的实际语句语法的一部分,因此包含它也是语法错误。一些 JDBC 驱动程序会从语句中删除最后一个 ; 以“修复”它,而一些驱动程序不会。

某些驱动程序允许 - 与 JDBC 规范相反 - 多个语句作为单个字符串执行,这通常必须使用连接属性启用,例如对于 mysql,它是选项 allowMultiQueries(参见 @987654321 @了解详情)。

【讨论】:

【参考方案4】:

取决于 DBMS 和版本号。在单个语句的末尾,分号通常是可选的。但是,如果您要执行包含多个语句的脚本,则它们需要以分号结束。

也许最后一个除外。但是不一致似乎是不好的形式。

【讨论】:

以上是关于SQL中是不是需要分号?的主要内容,如果未能解决你的问题,请参考以下文章

SQL脚本中的分号问题

Sonarqube PLSQL 自定义规则,用于在 SQL 脚本文件中检测正确的 SQL 终止符分号

T-SQL 转义select …. like中的特殊字符(百分号)

java中sql语句能不能加分号的问题?

数据库中IP字段中,两个IP的用分号隔开,不用逗号,用SQL实现

在 Oracle SQL 语句中使用分号