gpt4 book ai didi

spring - 在列中断言特定且唯一的值

转载 作者:行者123 更新时间:2023-11-29 11:51:17 25 4
gpt4 key购买 nike

我的 RDBMS 是 PostgreSQL。我使用 SpringBoot 和 Hibernate 作为 JPA。

让我们考虑一个非常简单的单列表:

Man
Age: integer

而且我想实现一个在表中添加一个人的方法。该方法应满足以下条件:

At most one man in table can be 80 years old

.

@Transactional
void addMan(int age){
....
}

看起来我需要对整个表进行独占锁定,是吗?怎么做?

最佳答案

还有第二种解决方案。

使用如下所示的 SERIALIZABLE 事务:

START TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SELECT count(*) FROM man WHERE age = 80;

现在,如果结果为0,继续:

INSERT INTO man VALUES (80);

COMMIT;

如果两个事务试图同时执行此操作,一个将因序列化错误而失败。

在这种情况下,您只需重试交易直到成功。

可序列化事务的性能比隔离级别较低的事务差,但它们的性能仍将优于实际序列化事务。

关于spring - 在列中断言特定且唯一的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50572125/

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