繁体   English   中英

选择,检查并插入是否满足条件

[英]SELECT, check and INSERT if condition is met

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

我需要做的是:

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

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

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

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

(使用mariaDB)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM