Android contactcontracts表中的字段CONTACT_ID是否自动递增

Android contactcontracts表中的字段CONTACT_ID是否自动递增,android,Android,我正在为联系人创建一个新数据库,并将conatctscontract字段的联系人id作为主键。我的问题是,如果有人删除联系人中的一行,那么android系统是否会重用该联系人的联系人id。如果是这样,那么我如何防止联系人id在我的应用程序中使用,或者有更好的方法解决这个问题?我假设您使用的是MySQL。数据库系统自动递增联系人id主键。删除该行时,该id已被“使用”,并存储在数据库中,可以说是“已使用”,即使该行本身已被删除。只要不重置自动增量起点(语法如下所示),它将继续保持这种状态 如果您使

我正在为联系人创建一个新数据库,并将conatctscontract字段的联系人id作为主键。我的问题是,如果有人删除联系人中的一行,那么android系统是否会重用该联系人的联系人id。如果是这样,那么我如何防止联系人id在我的应用程序中使用,或者有更好的方法解决这个问题?

我假设您使用的是MySQL。数据库系统自动递增联系人id主键。删除该行时,该id已被“使用”,并存储在数据库中,可以说是“已使用”,即使该行本身已被删除。只要不重置自动增量起点(语法如下所示),它将继续保持这种状态

如果您使用自动增量功能,则删除的联系人id将不会重复使用,只要您不重置该表的自动增量设置(据我所知)。它将仅从数据库中存储的最高ID继续


编辑:如果我没有弄错的话,使用auto_increment的列将用于一个特殊的数据库统计表(您不可用,但从数据库自动存储),该表存储最新的“auto_incremented”数字。使用上述语法将自动增量重置为0,并从那里恢复,填补已删除的空白。

如果您指的是内置的
联系人提供程序
数据库,则
联系人
表和
数据
表的id均为自动增量。
所以我不认为id会被重复使用


您可以检查代码库

因此,如果我有contact_id=20,并且我将其删除,那么contact_id 20将永远不会被再次使用,对吗?(我指的是android中的contactcontracts表)SQLite使用特殊的SQLite_序列表跟踪一个表所持有的最大ROWID。每当创建包含自动增量列的普通表时,就会自动创建并初始化SQLITE_序列表。SQLITE_序列表的内容可以使用普通的UPDATE、INSERT和DELETE语句进行修改。但对该表进行修改可能会干扰自动增量密钥生成算法。在进行此类更改之前,请确保您知道自己在做什么。摘自SQLite网站。答案是肯定的,除非您从SQLLITE_序列表更新它,否则不能再次使用它。这就是为什么他们称之为“自动”增量,这意味着数据库将自动增量,除非您以某种方式更改它。如果您希望更改算法,请参阅本文中的语法:Yep。谢谢你。您是如何找到负责创建联系人数据库的特定文件的?这是用于在ContactsProvider中创建数据库的databasehelper文件
ALTER TABLE contact AUTO_INCREMENT = 0;