例如一个用户执行这样的查询:
UPDATE table SET column = 100;
第二个用户:
UPDATE table SET column = 200;
假设,这两个查询在完全相同的时间、相同的秒数、相同的纳秒(或最小时间测量单位,用于此数据库)被请求,那么哪个查询将首先执行,然后哪一秒?
在这种情况下,数据库会随机选择查询序列吗?
附注我没有标记一些具体的数据库,我认为所有主要 RDBMS 的这种机制都是相似的。或者可能不是?
最佳答案
RDBMS 实现了一组缩写(称为)ACID 的属性。 Wikipedia explains the concept .
基本上,符合 ACID 的数据库会在某个级别锁定数据(典型的是表、页和行锁)。原则上同一个对象同一时间只能获取一个写锁。因此,数据库将任意锁定其中一个事务的行。
另一笔交易会怎样?这取决于情况,但应该发生以下两种情况之一:
- 事务等待锁可用。所以“最后”,它会分配值(失去锁,赢得 war ;)。
- 事务将“超时”,因为适当的行不可用。
您的情况要复杂得多,因为表中的所有行都会受到影响。不过,最终,在符合 ACID 的数据库中,所有行都应具有相同的值。
我应该注意到主要数据库(通常)是 ACID 兼容的。然而,即使它们有锁和事务以及类似的机制,细节也会因数据库而异。
关于sql - 几个同时请求的查询执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168654/