【发布时间】:2021-08-04 11:35:01
【问题描述】:
考虑下面的“用户”表。假设我希望每个国家/地区最多允许 3 个用户(在现实世界中,这个数字可能是数千)。任何违反此条件的新插入都应该失败。有没有办法在数据库级别实现这一点,在并行插入期间保持数据一致?
用户表
| ID | UserName | Country |
|---|---|---|
| 1 | user1 | US |
| 2 | user2 | US |
| 3 | user3 | US |
| 4 | user4 | UK |
| 5 | user5 | UK |
| 6 | user6 | UK |
| 7 | user7 | US ---> This should fail!! |
实现此目的的一种方法是在应用程序中使用 MySQL 锁定读取,例如“for update”。但这会影响并行插入期间的应用程序性能。
任何帮助将不胜感激
【问题讨论】:
-
您可以将逻辑构建到查询本身中
-
你使用什么版本的 MySQL?
-
我使用的是 MySQL 5.7
-
但这会影响并行插入期间的应用程序性能。决定什么更重要 - 性能或一致性。
-
如果没有办法同时实现,那么我更喜欢一致性