【发布时间】:2018-08-11 12:44:42
【问题描述】:
我正在设计一个多租户 MySQL 数据库。我的做法是为所有租户使用一个数据库,并在每个表中都有一个租户ID 列来分隔每个租户的数据。
对于某些表,我需要在特定租户中生成一系列连续的参考编号。
例如,我有一个名为 book 的表,其中包含以下列:租户 ID 和 book REF。 Book REF 用于唯一标识租户内的book。假设有 2 个租户:租户 1 和租户 2。每个租户都有一些书籍。现在我希望每个租户中的 book REF 像 1,2 一样运行,...
显然,在这种情况下,book.REF 并不是真正的 ID,因为租户 1 中的一些与租户 2 中的一些相同。但是由于它们被租户 ID 分开,所以它就可以了。
我不能对book REF 使用“自动增量主键”,因为它会在book REF 的租户中留下“漏洞”。
所以简而言之,bookREF有2个要求:
- 它们在租户内是连续的;
- 每个在租户中都是唯一的;
您认为实现这样一个目标的好方法是什么?
【问题讨论】:
-
imo,可靠地生成序列号的方法是 1) 拥有一个命名序列表。 2)使用交易。 3)显式锁定序列(SELECT seq1 FOR UPDATE)。 4)更新它。 5)使用序列或将其丢弃。 6) 以 COMMIT 或 ROLLBACK 结束事务。这是安全的,因为所有访问都是序列化的。我有一些“redbeanphp”的测试代码。
-
瑞恩,感谢您的建议。听起来很有希望......如果有的话,你能分享一下redbeanphp链接吗?谢谢。
标签: mysql sql sequence auto-increment