gpt4 book ai didi

sql - 数据库是单线程的吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:24 26 4
gpt4 key购买 nike

假设有一家医院运行一个简单的数据库。在这个数据库中有一个名为“patients”的表,其中包含 1,000,000 条记录——每条记录都是一个状态为“活跃”或“已出院”的患者。

Bob 运行以下查询,这将需要几秒钟或几分钟才能运行:

SELECT COUNT(*) FROM PATIENTS WHERE STATUS = "active"

在 Bob 开始执行查询的那一刻,有 100 名患者处于事件状态。

但是,在查询运行时,Susie 在表上运行了以下命令:

UPDATE PATIENTS SET STATUS = "discharged" WHERE PATIENT_ID = 583739789

此命令使一名事件患者出院,将实际“事件”患者计数更改为 99。

在 Susie 这样做之后,Bob 的查询就完成了。他的查询结果是 100 名还是 99 名活跃患者?不同的数据库(Oracle、MySQL、SQLite 等)如何处理这个问题?

最佳答案

鉴于问题提到了 SQL 查询,我假设您的意思是“所有 SQL 查询都是单线程的”。

SQL 服务器旨在处理多个连接,但事务日志中的每个条目都必须按顺序处理。

简而言之,许多人可以在多个线程上连接到服务器,但在任何给定时间点只能发生 1 个事务。

更好的理解方式有点像访问文件(数据库在这方面大同小异)。

如果没有一些特定的知识(例如正在写入文件的哪一部分),2 个线程不能同时“可靠地”写入文件,但即使知道这也会导致线程写入文件的前半部分将内容推送到文件的后半部分。

因此,出于这种原因,SQL 是“事务性的”,并以顺序方式处理每个语句……它非常擅长快速处理!

关于sql - 数据库是单线程的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43547654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com