小编us2*_*012的帖子

checksum(newid()) 作为主键 - 如果发生冲突会发生什么?

检查我系统上某些软件使用的相当关键的数据库,我发现其中一个表在列上有一个主键Id,其中Id使用checksum(newid()). 这让我感到不安;在newids的保证是独一无二的,但通过将校验和(一个32位整数,大概是出于性能的原因?),你有一些机会,你在表中得到的碰撞(用1M行,我把那大约 1:4000 的机会,对我来说太多了)。

所以:

  • 我是否遗漏了一些关键的信息,表明上述内容实际上没问题?
  • 如果不是 - 如果应用程序尝试向表中插入新行并checksum(newid())给出一个已经存在的主键,会发生什么?我的桌子会炸吗?插入是否会失败并将其留给应用程序如何处理?

sql-server-2008 sql-server primary-key unique-constraint

4
推荐指数
1
解决办法
1824
查看次数