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