sql - 几个同时请求的查询执行顺序

标签 sql database rdbms

例如一个用户执行这样的查询:

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/

相关文章:

php - MySQL插入语句不会插入?

java - 数据库文件未创建?

php - sql连接问题

sql - 如何在 SQL 查询中应用特定格式的出生日期?

mysql - 将 Couchdb 共享或复制到 Mysql

android - 如何删除重复的数据库记录?

Mysql更新和连接查询

java - 使用 JDBC 在 KDB 数据库中执行查询

sql - LIKE '[A-D]%' 有什么区别?和介于 'A' 和 'D' 之间;在 SQL Server 中

sql - 如何在Hbase中进行反规范化?