gpt4 book ai didi

MySQL auto_increment innodb_autoinc_lock_mode = 2 但有时仍按顺序填充

转载 作者:行者123 更新时间:2023-11-30 21:37:31 27 4
gpt4 key购买 nike

我有 innodb_autoinc_lock_mode = 2 的 MySQL my.cnf 文件设置,但查看表时,主键有时不遵循该规则。我主要有:

710
712
714
716
718

等等...这很好。

但在一些记录中我有:

720
722
723
724
725
726
728
730

等...

应该始终遵循增加 2 还是更多的建议?

我们有一个集群环境,这就是为什么他设置了增量2。尽量避免可能的键冲突。

我们需要遵循一些发票开具准则,并证明发票编号顺序没有间断。这会导致序列出现问题,因为我们使用主键 ID 作为发票编号。

在集群环境中设置 innodb_autoinc_lock_mode = 1 是个坏主意吗?

寻找有关如何实现无缝发票编号的最佳建议。

最佳答案

您对 AUTO_INCREMENT 要求太多。它保证了唯一的编号。时期;句号。

auto_increment_increment 大于 1 是“Master-Master”复制首次使用的技术,以防止重复。后来各种“集群”解决方案采取了相同的策略。因为它有效。

我注意到您的列表中偶尔出现奇数。一位大师在做偶数,另一位大师在做奇数,但插入频率较低。任何避免间隙的尝试都会显着减慢处理速度。对于 99.9% 的用户来说,这比担心差距更重要。

我不是在讲课。几种情况下会出现差距。显然,DELETE 会留下空白。但它们有时会在它们的尾迹中留下新的空白:INSERT IGNORE、IODKU、REPLACEROLLBACK。同样,您不能相信这些值会单调递增。

innodb_autoinc_lock_mode 在某些情况下可能有帮助,但在其他情况下可能没有帮助。它是在开发人员发现一种稍微更快的 AI 方法时添加的,但同样以值(value)的可预测性为代价。

好的,您想要连续的发票编号,它们永远不会被删除,等等。您最好的选择是拥有一个获取“下一个”发票编号的“服务”(API)。想象一个只有一行一列的表格。并编写一个存储过程来递增该数字并将其返回给客户端。然后客户在需要发票编号的任何地方使用该编号。

您可以根据请求发票编号的时间使编号连续。根据插入发票的时间,可能很难使它们连续。作为“发票”,您可能应该删除它们,而是使用某种“已删除”标志来处理错误、取消等。

关于MySQL auto_increment innodb_autoinc_lock_mode = 2 但有时仍按顺序填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53229796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com