首页 > 解决方案 > 如何为每个用户设置第二个自动增量列?

问题描述

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

问题是在我的国家,应该为同一个人订购账单 ID 的参考,否则他将因丢失的账单而被审计。例如,他给了我一张 0001 的账单,第二张是 0005。他将因缺少 4 而被审问。

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

用户 1 - idUser= 1 ,idBill = 1

用户 1 - idUser= 1 ,idBill = 2

用户 2 - idUsr = 2 , idBill = 1

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

我正在使用 Java 和 MySQL。

标签: javamysqltriggersauto-incrementinvoice

解决方案


一个例子:

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 | 次要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<>在这里摆弄


推荐阅读