我的 web 应用程序在数据库中有一个表,其中有一id
列对于每一行总是唯一的。除此之外,我还希望有另一个名为的列code
,它将有一个 6 位唯一的字母数字代码,数字为 0-9 和字母 AZ。字母和数字可以在代码中重复。IEFFQ77J
。我知道随着时间的推移,随着更多行的添加,这个 6 位字母数字代码的唯一性会降低,但现在我可以接受。
要求(更新) - 代码长度至少应为 6 - 每个代码应为字母数字
所以我想生成这个字母数字代码。
问题
有什么好方法可以做到这一点?
- 我是否应该生成代码并在生成之后对数据库运行查询并检查它是否已经存在,如果存在则生成一个新的?为了保证唯一性,这段代码是否需要同步,只有一个线程运行?
- 数据库中是否有内置的东西可以让我这样做?
对于这一代,我将使用我在这个答案中看到的类似的东西
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);
}