【发布时间】:2012-12-16 04:41:12
【问题描述】:
我正在为联系人创建一个新数据库,并将 conatctscontract 字段的contact_id 作为主键。我的问题是,如果有人删除联系人中的一行,那么该联系人的 contact_id 是否会被 android 系统重用。如果是这样,那么如何防止在我的应用程序中使用该联系人 ID,或者是否有更好的方法来解决这个问题?
【问题讨论】:
标签: android
我正在为联系人创建一个新数据库,并将 conatctscontract 字段的contact_id 作为主键。我的问题是,如果有人删除联系人中的一行,那么该联系人的 contact_id 是否会被 android 系统重用。如果是这样,那么如何防止在我的应用程序中使用该联系人 ID,或者是否有更好的方法来解决这个问题?
【问题讨论】:
标签: android
我假设您使用 MySQL。数据库系统自动递增contact_id 主键。当该行被删除时,该 id 已经被“使用”并存储在数据库中作为“使用”可以说,即使该行本身已被删除。只要您不重置 auto_increment 起点(语法看起来像这样),它将继续保持这种状态
ALTER TABLE contact AUTO_INCREMENT = 0;
如果您使用 auto_increment 功能,只要您不重置该表的 auto_increment 设置(据我所知),已删除的 contact_id 将不会被重复使用。它只会从数据库中存储的最高 ID 继续。
编辑:如果我没记错的话,使用 auto_increment 的列用于存储最新的“auto_incremented”数字的特殊数据库统计表(您不可用,但自动从数据库存储)。使用上面的语法会将 auto_increment 重置回 0 并从那里恢复,填补已删除的空白。
【讨论】:
如果您指的是内置的contactsprovider 数据库,那么Contacts 表和Data 表的ID 都是AUTOINCREMENT。
所以我认为id不会被重用。
您可以查看代码库here
【讨论】: