如何为每个用户设置第二个自动增量列?
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
我知道以前有人问过这个问题,大多数答案都警告这样做或建议 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