sql - 这些行 ID 是如何生成的

标签 sql sql-server algorithm encryption

我正在尝试弄清楚如何在应用程序级别生成主键(ISV,我没有代码库),这样我就可以在后端进行一致的插入,而不必担心重复键。

按 ID 排序只是为了了解进度:

编辑

创建日期,对应ID

开始:

date         sysid              c_time
02/10/2009  A00029BC75ECF751    1835010
02/10/2009  A00059BC76712863    1835013
02/10/2009  A00069BC7BF6F327    1835014
08/14/2013  A0006A235AF21680    5841653
02/10/2009  A00099BC76D57865    1835017
07/06/2009  A000A9C590BDF134    4000288
02/10/2009  A000B9BC73594306    1835019
08/19/2009  A000D9C857013579    4795995
02/10/2009  A000E9BC7222D209    1835022
04/08/2009  A000E9C0007D0727    4810168

...

结束

date         sysid              c_time
10/06/2010  AFFFA9E2205D9752    5919265
01/29/2013  AFFFCA1706413272    3420395
02/10/2009  AFFFD9BC75264250    1835005
07/13/2009  AFFFD9C60B25C732    4402146
11/09/2012  AFFFDA11FBC8C706    5908518
07/17/2009  AFFFE9C64E1EB645    540642
09/30/2010  AFFFE9E1C7021704    3264751
02/10/2009  AFFFF9BC755DE457    1835008

我在想这是关于以 A 作为前缀的日期时间的某种算法吗?

有人有什么想法吗?

最佳答案

I'm trying to figure out how a primary key is being generated ... so I can do consistent inserts on the back end without worrying dup keys.

好吧,没有算法或源代码这是不可能的,但时间戳似乎是合理的,因为顺序 ID 之间的数字差异与顶部和底部集合之间的数量级相同。

因为它们看起来像 64 位十六进制数字,您可以只需将“最高”数字加 1。但是,不能保证第 3 方应用程序也会检查重复项 - 它可能会插入一个与您输入的值冲突的值。

假设它们的插入是连续的(并且您的插入不需要是连续的)您可以从 FFFFFFFFFFFFFFFF 开始并向后工作。

您仍然需要考虑变量 - 前 3/4 位 (1010 = A) 是标志吗?在第二位插入一个 1 的值会有什么坏处吗?这些问题都不能仅通过查看生成的 ID 来回答。

不过,您尝试的任何事情都应该通过 ISV 进行验证。

关于sql - 这些行 ID 是如何生成的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21002278/

相关文章:

sql - jsonb_array_elements 获取元素位置

mysql - "in"select语句Mysql上的运算符

SQL Server 2008 - 如何添加约束以防止相同的值出现在 A 列和 B 列中?

algorithm - 有序和无序(有根)树之间的区别

algorithm - 多边形添加算法

c# - 事件日志实用性

sql - 使用唯一数据更新 SQL Server 中的 500,000 行

sql - 如何从具有相似列名的不同不相关表中获取列?

sql - 在 SQL Server Management Studio 中,如何找出哪些数据库中的哪些表具有具有给定名称的列?

algorithm - CLRS 对 Rabin Karp 的解释