生成连续唯一值的最佳方法

时间:2018-07-27 09:33:06

标签: php mysql

当您具有负载平衡的数据库和应用程序实例时,生成连续值的最佳方法是什么?

例如,我有一个负载平衡的mysql数据库。 我的PHP应用程序与docker一起部署,并具有3个容器

我必须生成连续的ID。我不能使用自动递增,因为我必须根据关系生成唯一的ID(例如,我必须根据与之相关的女巫社会生成唯一的账单号)

我的账单可以生成,但不能兑现。发出帐单时,我必须生成唯一的值。

TRIGGER ON UPDATE是一个好的解决方案吗?

想得到答案的答案

2 个答案:

答案 0 :(得分:0)

我将当前ID保存在db表中。 每次您想要增加ID时,请执行以下操作:

  • 开始交易
  • 阻止db表中的id行:在mysql中使用FOR UPDATE
  • 读取当前ID
  • 增加ID
  • 生成具有ID的账单
  • 将ID存储回数据库
  • 提交交易

答案 1 :(得分:-2)

我要去MAX(id)+1 您可以使用以下查询获得序列中的下一个数字:

SELECT COALESCE(MAX(id),0) + 1 FROM bill
 WHERE society = 'XYZ'

您必须采取步骤以确保两个进程不会生成相同的数字,并且这可能很复杂,但并非不可克服。

就我个人而言,我总是会避免触发。我从没使用过触发器,以后也不后悔。