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中是不是需要分号?的主要内容,如果未能解决你的问题,请参考以下文章
Sonarqube PLSQL 自定义规则,用于在 SQL 脚本文件中检测正确的 SQL 终止符分号
T-SQL 转义select …. like中的特殊字符(百分号)