假设我们有一个如下表,
+----+---------+--------+
| id | Name | Bunnies|
+----+---------+--------+
| 1 | England | 1000 |
| 2 | Russia | 1000 |
+----+---------+--------+
我们有多个用户在指定时间段内(例如 2 小时)移除兔子。(所以最少0个兔子,最多1000个兔子,兔子被退回,不是用户添加的)
我正在使用两个基本的事务查询,例如
BEGIN;
UPDATE `BunnyTracker` SET `Bunnies`=`Bunnies`+1 where `id`=1;
COMMIT;
当有人归还兔子时,
BEGIN;
UPDATE `BunnyTracker` SET `Bunnies`=`Bunnies`-1 where `id`=1 AND `Bunnies` > 0;
COMMIT;
当有人试图带走兔子时。我假设这些查询将在引擎盖下实现某种原子性
用户必须不能比每个国家/地区拥有更多的兔子(即,如果 23 个用户同时交易,则 -23 个兔子)
我的问题是,在这种情况下我如何保持 ACID 安全,同时能够同时添加/递增/递减 bunnies 字段,同时保持在范围内(0-1000)我可以将隔离级别设置为序列化,但我我担心这会影响性能。
有小费吗?提前致谢