我想为发票生成客户ID,因此出于显而易见的原因不想从1开始计算。在MySQL中,您可以生成一个唯一的随机数吗?
我知道RAND()函数,但它不保证唯一性。什么是正确的方法?
不起作用:
INSERT INTO test (number) VALUES (FLOOR(0 + (RAND() * 9999999999)));
PS:服务器端我正在使用PHP并使用FPDF生成发票。
答案 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
增加发票号码很好 - 它们只需要是唯一的,而不是随机的。