我的web应用程序在数据库中有一个表,其中id
列对每一行都是唯一的。除此之外,我还想要另一个名为code
的专栏,它将包含一个6位数字的唯一字母数字代码,其编号为0-9和字母A-Z。字母和数字可以在代码中复制。即FFQ77J
。我知道这个6位字母数字代码的独特性随着时间的增加而减少,因为增加了更多的行,但现在我确定了这一点。如何根据唯一整数获取唯一字母数字
要求(更新) - 该代码至少应为长度为6 的 - 每个代码应该是字母数字
所以我想产生该字母数字代码。
问题
什么是做到这一点的好办法?
- 我应该生成代码并生成后,运行一个查询到数据库并检查它是否已经存在,如果是的话就生成一个新的?为了确保唯一性,这段代码是否需要同步,以便只有一个线程运行它?
- 是否有内置于数据库的内容可以让我这样做?
对于我将使用这样的事情,我在this answer
char[] symbols = new char[36];
char[] buf;
for (int idx = 0; idx < 10; ++idx)
symbols[idx] = (char) ('0' + idx);
for (int idx = 10; idx < 36; ++idx)
symbols[idx] = (char) ('A' + idx - 10);
public String nextString()
{
for (int idx = 0; idx < buf.length; ++idx)
buf[idx] = symbols[random.nextInt(symbols.length)];
return new String(buf);
}
ids需要是随机的吗?使用(非随机)计数器会更有效 - 您将保证唯一性,而无需检查值是否已存在 –
我认为您的意思是代码?他们需要看起来有点随意,所以他们不容易猜测。 – Anthony
为什么?为什么不在每次需要时从ID中计算它?通过这样做你可以解除数据库的正常化。 – EJP