如何为每个用户设置第二个自动增量列?

How to set an a second Auto increment column per user?

我知道以前有人问过这个问题,大多数答案都警告这样做或建议 MyISAM 的解决方案,但我使用的是 InnoDB。 我正在尝试为用户生成发票或账单,以便他提供给我(商业计划要求)!

问题是,在我的国家/地区,应订购同一人的账单 ID 参考,否则他将因遗漏账单而被审计。比如他给了我一张0001的账单,第二张是0005。他将被审问是否缺少4.

所以我需要为每个 UserID 自定义一个自动增量。

用户 1 - idUser= 1 ,idBill = 1

用户 1 - idUser= 1 ,idBill = 2

用户 2 - idUsr = 2,idBill = 1

一些线程建议使用触发器,而另一些线​​程则警告 table 锁。我个人不熟悉触发器,所以我避开它们,因为它们需要维护。

我正在使用 Java 和 MySQL。

一个例子:

CREATE TABLE main (id INT AUTO_INCREMENT PRIMARY KEY,
                   primary_id CHAR(3), 
                   secondary_id INT) ENGINE = InnoDB;
CREATE TABLE auxiliary (primary_id CHAR(3), 
                        secondary_id INT AUTO_INCREMENT,
                        PRIMARY KEY (primary_id, secondary_id)) ENGINE = MyISAM;
CREATE TRIGGER generate_secondary_id
BEFORE INSERT 
ON main
FOR EACH ROW
BEGIN
    INSERT INTO auxiliary (primary_id) VALUES (NEW.primary_id);
    SET NEW.secondary_id = LAST_INSERT_ID();
END
INSERT INTO main (primary_id) VALUES
('A01'),
('A01'),
('B01'),
('C01'),
('A01'),
('B01'),
('A01'),
('B01');
SELECT * FROM main;
id | primary_id | secondary_id
-: | :--------- | -----------:
 1 | A01        |            1
 2 | A01        |            2
 3 | B01        |            1
 4 | C01        |            1
 5 | A01        |            3
 6 | B01        |            2
 7 | A01        |            4
 8 | B01        |            3

db<>fiddle here