在MySQL中生成连续的引用号

时间:2018-03-03 11:42:26

标签: mysql sql sequence auto-increment

我正在设计一个多租户MySQL数据库。我的方法是为所有租户使用单个数据库,并在每个表中有一个租户ID列来分隔每个租户的数据。

对于某些表格,我需要在特定租户中生成一系列连续参考号。

例如,我有一个名为book的表,其中包含以下列:租户IDbook REFBook REF用于唯一标识租户中的book。假设有2个租户:租户1和租户2.每个租户都有一些书。现在我希望每个租户中的book REF运行1,2,...

显然,book.REF在这种情况下并不是ID,因为租户1中的某些人与租户2中的某些人相同。但是因为他们被租户分开ID {1}},它会起作用。

我无法对book REF使用'auto_increment PRIMARY KEY',因为它会在租户的book REF中留下“漏洞”。

简而言之,book REF有两个要求:

  1. 他们在租户中是连续的;
  2. 每个人在租户中都是独一无二的;
  3. 您认为实现这一目标的好方法是什么?

1 个答案:

答案 0 :(得分:0)

最好的方法可能是触发器,即使它在重负载下也不是非常安全。

如果同一租户从10台PC上插入1M本书,您可能会点击重复的密钥,因此请务必使用CREATE UNIQUE INDEX idxu_book ON book(id,ref)

来避免这种情况

无论如何,这是一个触发器,为每个ID租户制作序列:

DELIMITER $$

CREATE TRIGGER `tgi_book_ref_seq` BEFORE INSERT ON `book` 
FOR EACH ROW
BEGIN

    SET NEW.ref = (
            SELECT COALESCE(MAX(ref), 0)+1
            FROM book 
            WHERE id = NEW.id
        );

END $$
DELIMITER ;