[英]SELECT, check and INSERT if condition is met
我有以下表格:Tour,Customer,TourCustomerXRef。 假设每个巡回赛都有容量上限。 现在,一个请求到达后端进行预订。
我需要做的是:
但是,可能会同时调用后端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.