我正在设计一个多租户MySQL数据库。我的方法是为所有租户使用单个数据库,并在每个表中有一个租户ID
列来分隔每个租户的数据。
对于某些表格,我需要在特定租户中生成一系列连续参考号。
例如,我有一个名为book
的表,其中包含以下列:租户ID
和book
REF
。 Book
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
有两个要求:
您认为实现这一目标的好方法是什么?
答案 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 ;