【问题标题】:Will SQL Select query select record which was inserted during Select query execution?SQL Select 查询会选择在 Select 查询执行期间插入的记录吗?
【发布时间】:2020-08-01 18:20:36
【问题描述】:

假设我们有一张表bookings,其中包含十亿条记录。我们编写了一个简单的SELECT 查询,通过一些WHERE 子句从该表中选择一些记录(与WHERE 子句中的内容无关。此查询将花费几秒钟)。在执行了这个SELECT 查询之后(在它完成之前),我们在bookings 表中插入了一条记录(这条记录满足第一个SELECT 查询的WHERE 子句)。

问题:“当第一个 SELECT 查询完成时会选择这条新记录吗?

我希望得到有关 PostgreSQL 案例的答案,但很高兴听到 MySQL、SQL Server 和其他人在这种情况下的表现。

谢谢。

【问题讨论】:

  • MySQL 不会看到更新(除了一些非常不可能的情况),但我不确定您是否会可靠地看到更新事务。你想看到什么行为?
  • Postgresql 在选择开始后看不到任何更改。至少默认情况下(read_committed 隔离级别)。见这里:postgresql.org/docs/current/transaction-iso.html

标签: sql postgresql


【解决方案1】:

当第一个 SELECT 查询完成其工作时,是否会选择这条新记录

没有。

每条语句都是原子操作,并且会看到数据库的一致状态(=快照),就像语句开始时一样。

以上适用于 Postgres 和 Oracle(可能也适用于其他 DBMS,但我不能肯定。有些支持脏读,但不能保证)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 2013-11-23
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多