【发布时间】:2017-03-09 05:37:53
【问题描述】:
我有以下表格:Tour、Customer、TourCustomerXRef。假设每个巡回赛都有容量上限。现在一个预订请求到达后端。
我需要做的是:
- SELECT 和 count() TourCustomerXRef 中 tourid=123 的所有条目
- 在程序代码(或查询?)中:如果 count()
- 正确:插入到 TourCustomerXRef,返回成功
- False:返回错误
但是,后端 api 可能会同时被调用。这可能导致 SELECT 语句返回一个低于最大值的数字。两次容量,导致 INSERT 被执行多次(即使只剩下一个位置)。
对于上述情况,最好的预防措施是什么?设置事务隔离级别可序列化?还是可重复读取?
我担心应用程序逻辑(即使它只是一个简单的 if)会损害性能,因为读写锁不允许 api 执行只想选择数据而不插入任何内容的查询,对吧?
(使用 mariaDB)
【问题讨论】:
-
听起来你想要一个触发器。这种检查不应该在应用程序级别进行。
-
@GordonLinoff 在我的情况下触发器会做什么?遗憾的是,我想不出在插入之前不需要选择检查的东西