众所周知,在 SQL 语句中终止,还是应该终止?用分号;
。
我是说:
SELECT persona_id, persona_nom FROM persona;
但事实证明,在编程语言中,它经常是这样写的:
表格 A:
$SQL="SELECT persona_id, persona_nom FROM persona";
这里末尾的分号是在编程语言中表示该行的结束,而不是 SQL 语句,它将在没有分号的情况下发送到数据库驱动程序。
通常,SQL 语句中没有分号即可工作。
就我而言,我尝试这样写:
表格 B:
$SQL="SELECT persona_id, persona_nom FROM persona;";
这里只有引号中的分号将被发送到数据库处理程序,而最后的分号将指示编程语言中的行尾。
我的问题是,当我们使用方式 A时,如果我可能会得到一些意想不到的结果,或者只是程序可能会在某些情况下崩溃。
(我认为)可能存在问题的场景是在连续调用中执行普通 SQL 语句和存储过程或由同一用户创建的函数的假设情况。
我不知道你目前使用的是什么数据库引擎,但是在 SQL Server 中
在 2012 版之前,您可以创建没有最后分号的事务,它不影响其操作。但是,在新版本(2016)中,这已过时,现在强制使用
;
.在此页面上,您可以看到 sql server 2016 过时的函数和语句。
在 PostgreSQL 的情况下,如果您从命令控制台执行查询,则在您输入分号表示查询结束之前不会执行查询。
另一方面,如果您在 PgAdmin 中编写查询,您可能会或可能不会使用分号,并且两种形式同样有效。
你对此的回答:放还是不放;在 SQL 字符串的末尾有或可能有任何影响?是的,编程语言会自动添加分号,因为数据管理器的一个例子
PhPMyAdmin, MySqlWorkBench, PhPgAdmin ,PgAmin3
(我已经处理过它们)也这样做;直接用电机执行这些指令就足够了,直到你读到它,它;
会继续等待图像中的指令,我会为你放置示例关键是接连不断。句子会一一发送到数据库,所以
;
无论如何都没有必要。另一方面,任何现代 ORM(或数据库插件)都能够处理所有这些问题。
“;”的使用或不使用 不代表风险。这两种形式都是有效的,据我所知,它的使用是从 SQL 的第一个版本中推荐的,目的是让程序员为可能的实现和义务做好准备,这显然在 SQL 2016 版本中被宣布为过时。它并没有消除它在未来像在 Java 等编程语言中那样被强制使用的可能性。问候。
总结:您提出的两种形式之间没有区别,因为通常分号是隐式放置的。使表格 B 有两个结果:
现在取决于你在做什么(和一般知识),我建议你阅读 SQL 注入。
https://www.w3schools.com/sql/sql_injection.asp https://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL
当您在单个批处理中有许多指令(触发器、存储过程等)时,分号在 SQL 中也很有用,但您可以将其替换为与任何其他编程语言中的 {} 相同的 BEGIN - END