例如,一个用户执行如下查询:
UPDATE table SET column = 100;
第二位用户:
UPDATE table SET column = 200;
并且假设这两个查询是完全同时,相同秒,相同纳秒(或最小时间测量单位,这是针对此DB),然后将首先执行哪个查询哪一秒?
在这种情况下,数据库会随机选择查询序列吗?
P.S。我没有标记一些具体的数据库,我认为所有主要RDBMS的机制都是相似的。或者可能不是?
答案 0 :(得分:2)
RDBMS实现了一组缩写(和称为)ACID的属性。 Wikipedia explains the concept
基本上,符合ACID标准的数据库会在某种程度上锁定数据(典型的是表,页和行锁)。原则上,可以同时为同一对象仅获取一个写锁。因此,数据库将任意锁定其中一个事务的行。
其他交易会怎样?这取决于,但应该发生两件事之一:
您的情况相当复杂,因为表中的所有行都会受到影响。但最后,所有行在符合ACID的数据库中应具有相同的值。
我应该注意,主要数据库(通常)符合ACID标准。但是,即使它们具有锁和事务以及类似的机制,细节也可以在数据库之间变化。
答案 1 :(得分:1)
通常,DML操作是通过获取 DML锁来完成的,其操作是 atomic 和一致。因此,在您的情况下,任何一个查询都将被赋予DML锁并执行,然后第二个将以类似的方式继续。第一个和第二个不知道是哪一个。