sql - SQL Select 查询会选择在 Select 查询执行期间插入的记录吗?
问题描述
假设我们有一张bookings
包含十亿条记录的表。我们编写了一个简单的查询,通过一些子句SELECT
从该表中选择一些记录(与子句中的内容无关。此查询将花费几秒钟)。在执行这个查询之后(在它完成之前),我们在我们的表中插入了一条记录(这条记录满足第一个查询的子句)。WHERE
WHERE
SELECT
bookings
WHERE
SELECT
问题:“当第一个查询完成它的工作时会选择这条新记录SELECT
吗? ”
最好我想回答有关 PostgreSQL 案例的问题,但很高兴听到 MySQL、SQL Server 和其他人在这种情况下的表现。
谢谢。
解决方案
当第一个 SELECT 查询完成其工作时,是否会选择这条新记录
不。
每个语句都是一个原子操作,并且看到数据库的一致状态(=快照),就像它在语句开始时一样。
以上适用于 Postgres 和 Oracle(可能也适用于其他 DBMS,但我不能肯定地说。有些支持脏读,但不能保证这一点)