生成唯一的10位数字

时间:2011-06-09 00:52:03

标签: mysql numbers unique

我想为发票生成客户ID,因此出于显而易见的原因不想从1开始计算。在MySQL中,您可以生成一个唯一的随机数吗?

我知道RAND()函数,但它不保证唯一性。什么是正确的方法?

不起作用:

INSERT INTO test (number) VALUES (FLOOR(0 + (RAND() * 9999999999)));

PS:服务器端我正在使用PHP并使用FPDF生成发票。

3 个答案:

答案 0 :(得分:4)

我建议使用AUTO_INCREMENT列并将值设为10位。您可以将它作为表格中的唯一列,如下所示,或者更实际地为您的发票表ID添加种子。

CREATE TABLE tablename (
  id bigint unsigned not null auto_increment,
  primary key(id),
  auto_increment=1000000000
);

答案 1 :(得分:2)

实际上,原因不是那么明显,除非你只是想让你的客户知道他们都有一位数的ID很少: - )

另外,客户ID通常是在添加客户而不是发票时生成的。如果你的发票编号是不同的,那么推理将是相同的。

使用具有合适的较低ID(例如314159)的虚拟条目填充表格,然后使用类似的内容:

insert into test (number) select max(number)+1 from test

或使用具有合适起始值的自动递增键(同样,此值取决于您,但您应该选择相对“非圆形”的内容)。

我有时会将前者用于需要完全控制分配值的情况(包括轻松更改它们的能力),但更强大的解决方案可能是自动增量。

答案 2 :(得分:0)

ALTER TABLE my_invoice_table auto_increment=1000000001

增加发票号码很好 - 它们只需要是唯一的,而不是随机的。