Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将多个SQL查询作为一个字符串排队,服务器行为?_Mysql_Sql_Sql Server_Tsql_Queue - Fatal编程技术网

Mysql 将多个SQL查询作为一个字符串排队,服务器行为?

Mysql 将多个SQL查询作为一个字符串排队,服务器行为?,mysql,sql,sql-server,tsql,queue,Mysql,Sql,Sql Server,Tsql,Queue,当您将例如3个查询作为一个字符串提交给SQL数据库,并用分号分隔,而另一个用户同时执行相同的操作时,我们的查询是否会被视为一个查询的“组”或“队列”,每个用户始终以相同的逻辑顺序执行,或者这些查询的队列是否可以“混在一起”,结果是我们的两个查询被一个接一个地激发 因此,基本上,我想知道发生这种情况时,MySQL和SQL Server的行为会是以下哪种情况: 执行路径情况1: 用户1查询1、用户1查询2、用户1查询3、用户2查询1、用户2查询2、用户2查询3 执行路径情况2: 用户1查询1、用户

当您将例如3个查询作为一个字符串提交给SQL数据库,并用分号分隔,而另一个用户同时执行相同的操作时,我们的查询是否会被视为一个查询的“组”或“队列”,每个用户始终以相同的逻辑顺序执行,或者这些查询的队列是否可以“混在一起”,结果是我们的两个查询被一个接一个地激发

因此,基本上,我想知道发生这种情况时,MySQL和SQL Server的行为会是以下哪种情况:

  • 执行路径情况1

  • 用户1查询1、用户1查询2、用户1查询3、用户2查询1、用户2查询2、用户2查询3

  • 执行路径情况2

  • 用户1查询1、用户2查询1、用户1查询2、用户2查询2、用户1查询3、用户2查询3

这取决于数据库引擎、锁定机制、事务和其他因素。事实上,这并不重要……只要它们都是选择查询。如果部分或全部查询包含写入操作,则应将每个批封装在事务中以确保原子性。

这取决于数据库是否将其视为多个单独的查询或单个事务。如果它将其视为一个事务,则顺序无关紧要。如果要确保它将其视为单个事务,可以通过多种方式向数据库发出信号,表明它应为您的查询创建一个事务。数据库(应)确保四个基本属性(ACID):

  • 原子-整个事务成功或失败
  • 组-无论事务成功与否,数据库始终保持一致状态
  • 隔离的-同时处理的多个事务不能相互干扰
  • 持久-数据库必须能够在软件和硬件故障后恢复提交的数据
隔离与您的情况相关。您的查询不应破坏其他人的查询,因此您不必担心其他用户同时提交查询

此外,我怀疑您的数据库是否运行在单个处理器上。很可能您描述的线性路径不会发生,因为数据库可以同时处理多个查询


为了安全起见,我会用
开始事务
开始查询,然后用
提交事务
结束查询(或者数据库需要的任何语法)。如果数据库确实将其视为多个单独的查询,则如果它们写入数据库,则可能会出现问题。最好使用事务。

对于SQL Server,特定用户的查询将按照指定的顺序运行,但可以与其他用户的语句交错,这取决于资源何时可用le.在事务内部,您可以保证数据的一致性,但您的语句仍可能与其他用户的语句交错。您使用的语句和锁的类型将决定其他语句是否能够访问您在查询中使用的相同表和行。

MyISAM引擎不是事务性的,所以本质上,每个查询都是在单独的事务中执行的。