0

我正在尝试创建一个可以在表中存储为 BIGINT 的唯一标识符。

我正在使用使用 BIGINT 作为唯一标识符的预先存在的表。数据库本身不会生成标识符,而是由插入值的外部程序执行此操作。我需要将我自己的值插入到这个表中,这样做需要生成一个唯一标识符,即 BIGINT(24)。

我正在考虑使用SELECT UTC_TIMESTAMP() + 0,但我正在使用的 MySQL 版本中不包含微秒(我无法控制)。

因此,经过一些研究,它看起来似乎SELECT UUID_Short()是更好的方法。但是我担心精度不够。

如果我使用SELECT UUID_SHORT()有没有办法在插入之前检查UUID_Short表中不存在的值?我应该提一下,我真的很想在 SQL 中完成所有这些操作,这样我就可以在数据库中创建一个每 24 小时运行一次的事件。每次事件运行时的插入数量约为 60 条记录,因此我认为性能不会成为问题。

4

1 回答 1

1

这就是UUID_SHORT()价值的构建方式

  (server_id & 255) << 56
+ (server_startup_time_in_seconds << 24)
+ incremented_variable++;

如果每次服务器启动不超过 2^24 = 16,777,216 次,则保证创建一个唯一的。如果您重新启动 MySQL,incremented_variable则会重置,但您的server_startup_time_in_seconds增加如此之大以至于它不会产生与UUID_SHORT()先前 MySQL 启动时调用的先前值重复的值。

于 2013-06-08T15:41:36.197 回答