我正在尝试弄清楚如何在应用程序级别生成主键(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/