几个同时请求查询执行序列

时间:2016-12-15 16:14:20

标签: sql database rdbms

例如,一个用户执行如下查询:

UPDATE table SET column = 100;

第二位用户:

UPDATE table SET column = 200;

并且假设这两个查询是完全同时,相同秒,相同纳秒(或最小时间测量单位,这是针对此DB),然后将首先执行哪个查询哪一秒?

在这种情况下,数据库会随机选择查询序列吗?

P.S。我没有标记一些具体的数据库,我认为所有主要RDBMS的机制都是相似的。或者可能不是?

2 个答案:

答案 0 :(得分:2)

RDBMS实现了一组缩写(和称为)ACID的属性。 Wikipedia explains the concept

基本上,符合ACID标准的数据库会在某种程度上锁定数据(典型的是表,页和行锁)。原则上,可以同时为同一对象仅获取一个写锁。因此,数据库将任意锁定其中一个事务的行。

其他交易会怎样?这取决于,但应该发生两件事之一:

  • 事务等待锁定可用。所以"最后",它将分配价值(失去锁定,赢得战争;)。
  • 交易将"超时"因为没有合适的行。

您的情况相当复杂,因为表中的所有行都会受到影响。但最后,所有行在符合ACID的数据库中应具有相同的值。

我应该注意,主要数据库(通常)符合ACID标准。但是,即使它们具有锁和事务以及类似的机制,细节也可以在数据库之间变化。

答案 1 :(得分:1)

通常,DML操作是通过获取 DML锁来完成的,其操作是 atomic 一致。因此,在您的情况下,任何一个查询都将被赋予DML锁并执行,然后第二个将以类似的方式继续。第一个和第二个不知道是哪一个。