【发布时间】:2021-07-13 08:17:36
【问题描述】:
我知道以前有人问过这个问题,并且大多数答案都警告过这样做或建议 MyISAM 的解决方案,但我正在使用 InnoDB。 我正在尝试为用户生成发票或账单,让他给我(商业计划要求)!
问题是在我的国家应该为同一个人订购账单ID的参考,否则他将被审计丢失的账单。比如他给了我一张0001的账单,第二张是0005。他会因缺少4而被审问。
所以我需要为每个 UserID 设置一个自定义的自动增量。
用户 1 - idUser= 1 ,idBill = 1
用户 1 - idUser= 1 ,idBill = 2
用户 2 - idUsr = 2 , idBill = 1
一些线程建议使用触发器,而另一些线程则警告表锁。我个人不熟悉触发器,所以我避开它们,因为它们需要维护。
我正在使用 Java 和 MySQL。
【问题讨论】:
-
一些线程建议使用触发器,而另一些线程则警告表锁。为了避免表锁,请使用额外的 MyISAM 基表来生成自动增量。
-
我不是数据库专家,但如果您的系统没有删除或复制发票,您可以将 id 生成为现有发票的数量 + 1,例如
.... id = (select count(*) from invoice where user =...) + ! ...。您也可以尝试将发票计数存储在一个列中(例如用户表或设计更好的东西),从那里读取它并在单独的查询中增加。 -
@Thomas 这可能会在并发线程中产生重复值。
-
@Akina 你是对的,那必须处理。
-
无论如何,不要这样做。如有必要,只需“即时”计算序列即可。
标签: java mysql triggers auto-increment invoice