【发布时间】:2021-09-07 21:05:56
【问题描述】:
假设我有一张表,用于存储鞋店的销售额。现在,假设在同一个数据库事务中,我删除了某个日期 (2021-09-08) 的所有销售额,然后重新填充了当天的销售额(因此在同一个事务中删除并插入)。如果在 2021 年 9 月 8 日选择销售的单独选择交易与删除/插入交易同时运行,那么该选择交易潜力是否会以 0 个结果返回。也就是select可以在delete之前,insert之前运行吗?
我知道删除不会在 postgres 中锁定整个表(至少,我认为这是正确的)。但也许事务以这样一种方式运行删除/插入,即表永远不会在单独的选择事务中看起来是空的?我真的不明白交易是如何运作的。是在一些临时内存中删除/插入,然后将其提交给实际的表数据(我认为这是不正确的)。
我们的应用程序经常在某些日期(删除/插入)中显示数据,我想知道在特定日期,对于运行选择的客户端来说,表格是否可以每个看起来都是空的。我认为答案是否定的……但我意识到我真的不知道这一点。我知道
【问题讨论】:
-
而不是重复我将指向您的文档Transaction Isolation。短版是
SELECT会在DELETE/INSERT事务开始之前看到表中的数据,假设默认隔离级别。