我的MySQL my.cnf文件设置为innodb_autoinc_lock_mode = 2,但在查看表时,主键有时不遵循该规则。 我主要有:
710
712
714
716
718
等... 很好。
但是在某些记录中,我有:
720
722
723
724
725
726
728
730
等...
应该始终遵循以2为增量的增量,还是更多建议?
我们有一个集群环境,这就是为什么他的增量为2。 试图避免可能发生的按键碰撞。
我们需要遵循一些开具发票的准则,并证明发票编号中的空缺顺序。 由于我们使用主键ID作为发票编号,因此这会导致序列混乱。
在集群环境中设置innodb_autoinc_lock_mode = 1
是个坏主意吗?
正在寻找有关如何实现无间隙发票编号的最佳建议。
答案 0 :(得分:0)
您向AUTO_INCREMENT
提出的要求过多。它保证了唯一的号码。期;句号。
auto_increment_increment
大于1是“ Master-Master”复制首先用于防止复制的技术。后来,各种“集群”解决方案采用了相同的策略。因为它有效。
我注意到您列表中偶尔有个奇数。一个Master在做偶数,另一个在做奇数,但是插入频率降低。避免这些间隙的任何尝试都会显着减慢处理速度。对于99.9%的用户,这比担心差距更为重要。
我没有讲课。在某些情况下,会出现差距。显然,DELETE
将留下一个空白。但是这些有时会 留下新的空白:INSERT IGNORE
,IODKU,REPLACE
,ROLLBACK
。同样,您不能相信这些值会单调增加。
innodb_autoinc_lock_mode
在某些情况下可能会有所帮助,但在其他情况下则无济于事。当开发人员发现一种更快的AI方式时添加了它,但又以价值的可预测性为代价。
好的,您希望连续的发票编号永远不会被删除,依此类推。最好的选择是让“服务”(API)获得“下一个”发票编号。假设一张表只有一行一行。并编写一个存储过程,使该数字递增并将其返回给客户端。然后,客户在需要发票编号的任何地方都使用该编号。
您可以根据要求发票编号的时间使编号连续 。根据插入发票的时间来使其连续可能非常困难。作为“发票”,您可能应该删除它们,而应使用某种“已删除”标志来处理错误,取消等。