如何在不使用AUTOINCREMENT的情况下生成唯一标识符

4
我正在将csv数据导入到mysql数据库中,我希望数据库为每个导入的记录生成一个唯一ID。我想在Crystal Report中使用唯一字段来生成收据号码。
您认为最好的做法是什么?

1
为什么要避免使用自动递增?如果你想避免低数字,可以使用AUTO_INCREMENT表选项来给它一个足够大的种子值。 - tvanfosson
2
你应该解释一下为什么AUTOINCREMENT对你不好,这样才能得到一个好的答案。 - Unreason
2个回答

3
如果您不想自动递增,那么唯一保证唯一性的另一种方法就是使用GUID作为ID。
我说“几乎”是因为理论上可能会生成相同的GUID,但对于日常使用而言,这几乎是零。来自维基百科文章的引用:
“唯一键的总数(21 28 或3.4×10 38 )非常大,以至于生成相同的数字的概率极小,并且已经开发了某些技术来帮助确保数字不会重复。”

谢谢,我会选择auto_increment函数。但是我需要知道如果我使用LOAD DATA INFILE命令,它是否会自动生成ID。另外,我需要知道如何修复出现的数字位数。我想使用hex(id)函数将数字转换为HEX,但我希望HEX值显示在一个6个字符的块中。ABCDEF。 - Ibrahim

2
“Autoincrement”是在MySQL中实现此目的的绝佳方式,有没有使用它的好理由?
如果您想要类似Oracle序列的东西,可以使用带有自动递增列的另一个表

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接