gpt4 book ai didi

sql - 如果满足条件,则选择、检查和插入

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

我有以下表格:Tour、Customer、TourCustomerXRef。假设每个 Tour 都有容量上限。现在一个预订请求到达后端。

我需要做的是:

  1. SELECT 和 count() TourCustomerXRef 中的所有条目,其中 tourid=123
  2. 在程序代码(或查询?)中:如果 count() < Cap
    1. True:INSERT into TourCustomerXRef,返回成功
    2. False:返回错误

但是,后端 api 有可能被同时调用。这可能会导致 SELECT 语句返回一个低于最大值的数字。 capacity 两次,导致 INSERT 被执行多次(即使只剩下一个地方)。

对于上述情况,最好的预防措施是什么?设置事务隔离级别可序列化?还是可重复读?

我担心应用程序逻辑(即使它只是一个简单的 if)可能会损害性能,因为读写锁不允许 api 执行只想选择数据而不插入任何内容的查询,对吧?

(使用 mariaDB)

最佳答案

您可以尝试在 SELECT 中使用锁定提示“FOR UPDATE”(mysql 示例):

BEGIN TRANSACTION;
SELECT * FROM TourCustomerXRef FOR UPDATE WHERE ...;
INSERT ...;
COMMIT;

关于sql - 如果满足条件,则选择、检查和插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42680806/

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