我想从mySQL自动增量生成帐单编号。我有列ID (主键和自动增量)。现在,根据该列ID,我正在根据用户的请求生成帐单编号。问题是,如果我删除了中间的一些记录,那么当输入新记录时,它不应该跳过删除的ID。
例如,1001, 1002 ,1003,1004等,如果我删除了记录Id 1002 &下一次如果我输入了任何新记录,那么我如何将1002分配回新记录。
发布于 2017-08-16 19:16:26
输入新记录时,不应跳过已删除的ID
是的,应该是这样。你只是依赖系统去做一些它从来没有设计过也从来没有声称要做的事情。
AUTOINCREMENT不是用来生成您的“帐单编号”的。它的设计目的是生成一个不断递增的标识符,并通过从不重用值来保证唯一性。它就是这么做的。
您可以使用您喜欢的任何逻辑手动生成"Bill No“,并将其存储在另一列中。不过,重用值会很奇怪。想象一下,如果您向某人开了一张账单,后来删除了该记录,然后向具有相同号码的其他人开出了另一张账单。
唯一性对于标识符来说很重要。
发布于 2017-08-16 19:29:26
从财务控制的角度来看,能够删除和重用发票编号会损害您的审计跟踪,并使您面临风险。另外,从数据库完整性的角度来看,不允许重用主键,因为这将导致意外的结果,例如其他表中的记录错误地出现在联接中。将你的主键自然化是有后果的(excellent discussion of natural and surrogate primary keys)。数据库通过不允许重用主键来保护其引用完整性。事实上,正如@David在他的回复中所说的那样,主键上的自动增量功能的一部分是维护键的唯一性。
现在到解决方案,从财务方面来说,发票永远不应该被删除,所以有一个审计跟踪,一个错误的发票应该有一个通过贷方票据的对立面。在数据库端,如果您必须‘删除’记录并重用发票编号,我建议为发票编号使用一个不同的字段,而不是实际删除,而是使用一个字段来标记为活动或已删除,并维护一个单独的递增发票编号。尽管不建议这样做,但这至少有助于保持您记录的完整性。
https://stackoverflow.com/questions/45711993
复制相似问题