PHP & MySQL - 生成自己唯一的引用



我目前正在编写一个web应用程序,我需要为报价和发票创建唯一的参考。

我想创建一个引用,其中包括年和月,然后是参考号。即yyyy - mm - 001。

web应用程序将是多租户的,多个用户将同时使用它。我关心的一个问题是,如果有多个用户同时执行相同的请求,我如何生成我的引用而不同时复制它?

对我来说最好的方法是什么?

我使用PHP 8和MySQL数据库。

可以使用主键id或任何唯一列,这样就不用担心数据的唯一性。使用该列/id生成一个惟一引用,如下所示:

update invoices
set reference = concat(date_format(now(), "%Y-%m-00"), unique_id)
where unique_id = 1; 

如果你确定你在一个月内不会有超过999个报价/发票,你可以这样做…

CREATE TABLE quotes (
id INT(14) NOT NULL AUTO_INCREMENT,
YMFqid char(11) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY (YMFqid));
CREATE TABLE YMnext (
YM char(7) NOT NULL,
next INT(3) NOT NULL DEFAULT 0,
PRIMARY KEY (YM));

然后得到下一个值,你需要一些查询,如…

SELECT next AS latest FROM YMnext WHERE YM = '2022-12';
INSERT INTO YMnext VALUES ('2022-12', 0);
UPDATE YMnext SET next = next + 1 WHERE YM = '2022-12' AND next = latest;

如果SELECT失败,则插入,否则更新并检查只有一行被更新。如果你有可能在一个月内有超过999个引号,那么你可以相应地改变列的大小。

相关内容

最新更新