我正在爲聯繫人創建新數據庫,並將conatctscontract字段的contact_id保留爲主鍵。我的問題是,如果有人刪除了聯繫人中的一行,那麼該聯繫人的contact_id將被android系統重新使用。如果是這樣,那麼我該如何防止在我的應用程序中使用該聯繫人ID,或者是否有更好的方法解決此問題?contactcontracts表中的字段CONTACT_ID是AUTO_INCREMENT
回答
如果您指的是內置的contactsprovider
數據庫,則Contacts
表和Data
表的ID均爲AUTOINCREMENT。
所以我不認爲id會被重用。
您可以檢查代碼庫here
我假設你使用MySQL。數據庫系統auto_increments contact_id主鍵。當該行被刪除時,該ID已經被「使用」並且作爲「used」被存儲在數據庫中,即使該行本身已被刪除。它將繼續保持下去,只要你不重置AUTO_INCREMENT起點(其語法看起來是這樣的)
ALTER TABLE contact AUTO_INCREMENT = 0;
刪除的CONTACT_ID的,如果你使用的AUTO_INCREMENT功能,只要將不被重用因爲你不會重置該表的auto_increment設置(據我所知)。它只會從存儲在數據庫中的最高ID開始繼續。
編輯:如果我沒有弄錯,使用auto_increment的列用於存儲最新「auto_incremented」編號的特殊數據庫統計表(對您不可用,但自動從數據庫中存儲)。使用上面的語法將auto_increment重置回0,它將從那裏恢復,填補已被刪除的空白。
所以,如果我有CONTACT_ID = 20,我刪除20將永遠不會被再次使用權CONTACT_ID? (我正在談論android中的contactcontracts表) –
SQLite會跟蹤表使用特殊的SQLITE_SEQUENCE表保存的最大ROWID。只要創建了包含AUTOINCREMENT列的普通表,SQLITE_SEQUENCE表就會自動創建並初始化。可以使用普通的UPDATE,INSERT和DELETE語句修改SQLITE_SEQUENCE表的內容。但是對該表進行修改可能會干擾AUTOINCREMENT密鑰生成算法。在進行這樣的改變之前,確保你知道你在做什麼。 – kadeempardue
來自SQLite網站。答案是肯定的,除非你從SQLLITE_SEQUENCE表中更新,否則不能再次使用它。這就是爲什麼他們稱之爲「自動」增量,這意味着數據庫會自動增加,除非你以某種方式改變它。如果你想改變算法,看看這篇文章的語法:http://stackoverflow.com/questions/692856/set-start-value-for-autoincrement-in-sqlite – kadeempardue
- 1. MySQL和INT auto_increment字段
- 2. 如何在MySQL表中創建嵌套的AUTO_INCREMENT字段?
- 3. 表中的auto_increment字段和其他主鍵
- 4. 插入查詢在mysql與auto_increment字段
- 5. 將MySQL字段設置爲auto_increment
- 6. 如何從「0」開始UNSIGNED AUTO_INCREMENT字段?
- 7. 無效列CONTACT_ID ContactsContract.Contacts
- 8. CONTACT_ID - 保持同步
- 9. 模式和表格設計與auto_increment字段,這不是一個關鍵
- 10. 如何獲取鏈接到MySQL的Access中auto_increment字段的值?
- 11. contact_id的最大數量
- 12. 我可以重置mySql中的auto_increment字段嗎?
- 13. 如何設置AUTO_INCREMENT字段以在MySQL中的值6000開始?
- 14. 如何在mysql中設計一個帶有兩個auto_increment字段的表
- 15. MYSQL表auto_increment
- 16. AUTO_INCREMENT 2表
- 17. plpgsql過程:如何將auto_increment字段添加到查詢中
- 18. 如何在命令行中使用mysql製作id字段auto_increment?
- 19. 在H2數據庫中,auto_increment字段增加32?
- 20. 2個auto_increment字段,其中1個重置
- 21. Android聯絡RAW_CONTACT_ID VS CONTACT_ID
- 22. MYSQL將行復制到AUTO_INCREMENT ID字段的另一個相同的表
- 23. ALTER TABLE表AUTO_INCREMENT = $ X
- 24. 如何使ID「主鍵」基於行而不是AUTO_INCREMENT的字段集編號
- 25. SQL中的唯一列可以是auto_increment
- 26. 更新InnoDB表中的auto_increment值
- 27. 字段列表中的列'user_id'是ambiguou
- 28. Enter是表單中字段的點擊
- 29. 有沒有辦法用phpMyAdmin設置auto_increment字段的初始值?
- 30. 休眠不尊重MySQL的auto_increment主鍵字段
是的。感謝那。您是如何設法找到該特定文件負責創建聯繫人數據庫的? –
這是數據庫幫助文件用於在ContactsProvider內部創建數據庫 – nandeesh