Iphone 如何重置核心数据中的主键计数/最大值?
我已经设法删除了使用核心数据存储的所有实体(如下) 问题是,我注意到主键仍在向上计数。是否有方法(无需手动编写SQL查询)重置实体的Z_MAX值?下面的截图阐明了我的意思 值本身不是问题,但我只是担心将来某个时候可能会达到最大整数,我不希望发生这种情况。我的应用程序将数据与web服务同步,并使用核心数据缓存数据,因此主键一次可能会增加数百/数千。删除整个Sqlite数据库不是一个选项,因为我需要为其他实体保留一些信息 我见过“reset”方法,但这肯定会重置整个Sqlite DB吗?如何仅为这一组实体重置主键?与我要重置的主键的其他实体没有关系 我只是担心在某个时候 将来可能会出现最大整数 我不希望这件事发生 发生 真的吗?您的主键是什么类型的?因为如果它不是Int16,你真的不需要关心它。有符号32位整数给出2147483647个值。64位有符号整数为您提供9223372036854775807值 如果您认为您将要用完所有这些,那么您可能需要担心比整数溢出更重要的事情 更重要的是,如果您使用的是核心数据,则不需要关心或真正使用主键。核心数据不是一个数据库——当使用核心数据时,你应该使用关系,而不是真正关心主键。核心数据并不真正需要它们。来自sqlite常见问题解答: 如果是可能的最大整数键, 9223372036854775807,然后是未使用的 键值是随机选择的 9223372036854775807/(1024^4)=8388608千兆瓦行。我怀疑你会先遇到其他限制。:)查看您将遇到的更实际的限制 询问sqlite3关于方便的核心数据存储的信息会产生:Iphone 如何重置核心数据中的主键计数/最大值?,iphone,objective-c,cocoa,core-data,Iphone,Objective C,Cocoa,Core Data,我已经设法删除了使用核心数据存储的所有实体(如下) 问题是,我注意到主键仍在向上计数。是否有方法(无需手动编写SQL查询)重置实体的Z_MAX值?下面的截图阐明了我的意思 值本身不是问题,但我只是担心将来某个时候可能会达到最大整数,我不希望发生这种情况。我的应用程序将数据与web服务同步,并使用核心数据缓存数据,因此主键一次可能会增加数百/数千。删除整个Sqlite数据库不是一个选项,因为我需要为其他实体保留一些信息 我见过“reset”方法,但这肯定会重置整个Sqlite DB吗?如何仅为这一
sqlite> .schema zbookmark
CREATE TABLE ZBOOKMARK ( Z_PK INTEGER PRIMARY KEY, ...
注意缺少“autoincrement”,这在sqlite中意味着永远不要重用密钥。所以,核心数据确实允许重用旧密钥,所以即使您能够随着时间的推移添加(和删除其中的大部分)那么多行,您也非常安全
如果你真的想重新设置它,那么在苹果的z_表中翻找是唯一的方法。[这是不是说这是事实上你应该做的事情。这不是(至少在你想要发布的任何代码中),即使它看起来有效。]除了直接/手动编辑核心数据存储是一个非常愚蠢的想法之外,正确的答案是: 删除数据库并重新创建它 当然,这样做会丢失所有数据,但如果你对这一小部分数据那么担心,那没关系,对吧
哦,核心数据将确保没有主键冲突。核心数据使用64位整数主键。除非I/O系统比CPU快很多数量级,这与CPU不同,它们近年来没有,否则您可以尽可能快地节省数百万年的时间 用完后,请向bugreport.apple.com提交一个bug
- 本