gpt4 book ai didi

database - PostgreSQL - 事务确保原子性吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:44 25 4
gpt4 key购买 nike

我想做这样的事情:

SELECT * FROM TABLE where *condition*
... TEST for a row being returned
IF NOT
INSERT the row

换句话说,我只想在表格中插入一行,如果它还不存在的话。我担心的是,当我测试结果集时,该行实际上可能被另一个进程插入。我不会知道这一点,并且会插入两行。我不希望发生这种情况。

我想过将这两个语句包装在一个事务中,但我怀疑这不是答案;我不知道事务是否具有类似于在执行时锁定表的效果,从而防止在我的 SELECT 和 INSERT 之间进行任何其他插入?这就是问题。

我怀疑最好的方法是简单地在行中的列之间设置一个唯一键,从而防止重复插入。但我仍然想知道我关于使用事务的想法是否完全有效或完全错误?

最佳答案

数据库会保证原子性。但这对你没有帮助,因为原子性并不意味着你的想法。它只是说,数据库要么完全执行一组操作,要么根本不执行。

这就是为什么 DB 人员总是谈论 ACID 的原因这意味着:

  • 原子性
  • 一致性
  • 隔离
  • 耐用性

您应该阅读链接的维基百科文章以及章节 Transaction Isolation在 PostgreSQL 手册中,它也解释了 PostgreSQL 上下文中的所有内容。

哦,您基本上需要 ACI。如果您不想使用唯一索引,则必须在插入之前对整个表进行表锁定。 所以索引是最简单和最健壮的解决方案。

关于database - PostgreSQL - 事务确保原子性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831551/

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