在MySQL中生成连续的引用号

问题描述 投票:1回答:1

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

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

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

显然,book.REF在这种情况下并不是真正的ID,因为它们中的一些在租户1中与租户2中的一些相同。但由于它们被租户ID分开,它将起作用。

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

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

  1. 他们在租户中是连续的;
  2. 每个人在租户中都是独一无二的;

您认为这样一个目标的好方法是什么?

mysql sql sequence auto-increment
1个回答
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 ;
© www.soinside.com 2019 - 2024. All rights reserved.