将allowMultiQueries=true添加到JDBC使MySQL接受语句具有多个查询。
但这到底是做什么的呢?这有什么好处吗?
也许它能减少往返旅行造成的延误?有点像
LOCK
UPDATE ...
UNLOCK如果在一个语句中这样做,锁的时间就会更短。
如果有的话,我什么时候会想把查询合并到一个语句中,而不是单独的语句中呢?
发布于 2016-06-22 14:48:19
为了运行您自己创建的安全脚本,否则需要逐行运行。例如,mysqldump中的一个脚本,或者您本来可以安全和信任地运行的脚本。当我问“你为什么要这么做”时,有人向我指出了这一点。他回应说,他自己储存的脚本,每个脚本都没有用户输入来进行愚蠢和sql注入的潜力。这些例程的大小受到封包的限制,当然,策略是将文件读入缓冲区,并将其用于多个查询。
用于协同运行几个语句,其中一个在调用的短暂性上依赖另一个语句。暂时性的意思是,如果你发出了一个后续的呼叫,而不是通过多个,必要的信息不再为它的一部分可用。一个常见的例子,无论明智与否,都是SQL_CALC_FOUND_ROWS和FOUND_ROWS()的结合体,它们在Percona文章一排排?中得到了广泛的揭露。在这种情况下,有一个论点是,不仅返回结果集而且有可用的单个调用--此后不久将捕获的计数--是实现更精确分页例程的更明智的途径。这假设单独调用count(*)和另一个调用数据可能会在多用户并发系统中产生差异,就像我们所有的系统一样。因此,上面提到的语句解决了准确性问题,而不是Percona文章所涉及的性能问题。另一个用例是在查询中启动和使用用户定义变量。但是,其中许多可以折叠到查询中并使用cross join进行初始化。
发布于 2016-06-22 03:21:56
如果有的话,我什么时候会想把查询合并到一个语句中,而不是单独的语句中呢?
这个特性有两个很好的用例:
username ='' AND 0 = 1;←就在这里。在这种模式下,注入分号之后的任何内容都是错误的,这是应该的。在这种模式下,"oops“的整个世界都可以打开。我的意思是..。你是对的。别用它。
是的,它减少了往返时间对数据库、流水线查询的影响.如果有一个远距离的数据库.但以增加风险为代价,这是不值得的。
https://stackoverflow.com/questions/37955397
复制相似问题