mysql - allowMultiQueries 究竟做了什么?

标签 mysql jdbc connection-string

allowMultiQueries=true 添加到 JDBC 字符串使 MySQL 接受具有多个查询的语句。

但这到底是做什么用的呢?这有什么好处吗?

也许它减少了往返行程造成的延迟?有点像

LOCK
UPDATE ...
UNLOCK

如果在一条语句中完成,则持有锁的时间更短。

什么时候,如果有的话,我想将查询组合在一个语句中,而不是在单独的语句中?

最佳答案

用于运行您自己创建的安全脚本,否则需要逐行运行。例如,来自 mysqldump 的脚本,或者您本来可以安全且可信地运行的脚本。当我问“你为什么要那样做?”时,有人向我指出了这一点。他回应说,他的脚本库是他自己的,每个脚本都没有用于 tomfoolery 的用户输入和 sql 注入(inject)的可能性。这些例程的大小受限于 max_allowed_packet当然,策略是将文件读入您​​的缓冲区,并将其用于 Multi 中的查询。

用于在调用的 transient 性质中一个依赖另一个的情况下同时运行一些语句。 transient 意味着如果您不是通过 Multi 发出后续调用,则其中的一部分不再提供必要的信息。一个常见的例子,无论是否明智,都是 SQL_CALC_FOUND_ROWSFOUND_ROWS() 的二重奏,它在 Percona 文章 To SQL_CALC_FOUND_ROWS or not to SQL_CALC_FOUND_ROWS? 中被普遍揭穿。 .在这种情况下,有一个论点是,不仅返回结果集而且可以在之后不久获取可用的 count 的单个调用是更准确的分页例程的更明智的途径。这假设对 count(*) 的单独调用和对数据的另一个调用可能会在多用户并发系统中产生差异,就像我们所有的系统一样。因此,刚才提到的措辞涉及准确性,而不是 Percona 文章所关注的性能。另一个用例是启动和使用 User-Defined Variables进入查询。但是,其中许多可以折叠到查询中并使用 cross join 进行初始化。

关于mysql - allowMultiQueries 究竟做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37955397/

相关文章:

MySQL 查询 : display the number of posts for each unique city

php - php 中的 mysql.connect_timeout 与 mysql 中的 connect_timeout

mysql - cakephp3 自己的查询生成器

java - 如何使用 JDBC 访问 Oracle 表统计信息,特别是 NUM_ROWS 和 AVG_ROW_LEN?

database - 如何在外部企业库配置文件中指定 Entity Framework 代码优先连接字符串

postgresql - 如何处理 Postgresql URL 连接字符串密码中的特殊字符?

php - 如何使用数据库数据在 html 中填充选择下拉列表

java - ExecuteBatch 和准备语句的奇怪行为

java - 创建格式为 "yyyy-mm-dd"的变量 Date

asp.net - 'Unicode' 是一个无效的连接字符串属性 Asp.net