java - 如何为每个用户设置第二个自动增量列?
问题描述
我知道这个问题之前已经被问过,并且大多数答案都警告这样做或建议 MyISAM 的解决方案,但我正在使用 InnoDB。我正在尝试为用户生成发票或账单,让他给我(商业计划要求)!
问题是在我的国家,应该为同一个人订购账单 ID 的参考,否则他将因丢失的账单而被审计。例如,他给了我一张 0001 的账单,第二张是 0005。他将因缺少 4 而被审问。
所以我需要每个 UserID 有一个自定义的自动增量。
用户 1 - idUser= 1 ,idBill = 1
用户 1 - idUser= 1 ,idBill = 2
用户 2 - idUsr = 2 , idBill = 1
一些线程建议使用触发器,而其他线程则警告表锁。我个人不熟悉触发器,所以我避开它们,因为它们需要维护。
我正在使用 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 | 次要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<>在这里摆弄
推荐阅读
- python - 通过 Google API 列出带有用户创建标签的 Gmail 邮件时出现问题
- c - C:我编写了一个程序来按升序对数组进行排序,但无法弄清楚 for 循环中某个步骤的原因
- mysql - innodb_ft_min_token_size = 1 性能影响
- postgresql - 通过 SSH Bastion 连接到 Grafana 中的 PostgreSQL 数据源
- node.js - 编写 NPM 包,我如何指定 PNG 文件路径是参考 node_module 脚本而不是从它导入的位置
- sql - SQL - 带有异常的重复日历事件
- sql-server - 使用 DBeaver 连接到 SQL Server Windows 身份验证
- php - 使用 *__in 在循环中排除当前帖子(排除没有'post__not_in')
- javascript - 如何在Javascript中将查找应用于数组?
- reactjs - 如何解决 React 中事件处理程序的丢失绑定问题?