Insert
SQLite3 ‘OR IGNORE’ 留下空的主鍵 ID
我在我的主表中使用’INSERT OR IGNORE INTO’,它工作正常,但在忽略記錄時會留下空的主鍵 ID。這導致我的主鍵編號出現大幅跳躍,因為我每次都重新掃描部分相同的輸入數據。我可以避免這種情況並在下次通話之前將 ID 重新設置為上次使用的值嗎?
謝謝
顯然,從鍵定義中省略自動增量就可以了。鍵仍會自動增加,但不會在觸發 IGNORE 時自動增加。我在這裡找到了這個解決方案:https ://stackoverflow.com/questions/47120708/sqlite-autoincrement-and-insert-or-ignore-will-produce-unused-autoincrement-key
不是真正回答這個問題,而是“你確定你需要嗎?”:
這導致我的主鍵編號出現大幅跳躍
除非您有價值耗盡的危險,否則您可能不應該關心。如果您可能超過 2,000,000,000,則使用大於 32 位的整數類型作為鍵值。由於 sqlite 不是強類型數據庫,您甚至不需要聲明它。
作為一般規則,如果您的主鍵是代理鍵(例如自動遞增值或 UUID)而不是(或派生自)正在建模的實體的真實屬性,則實際值應該無關緊要獨特的,因此值之間的差距也不重要。
還有許多其他原因導致自動增量值存在差距,因此目前接受的解決方案並不能阻止這種情況的發生(它只是解決了它會發生的原因之一,因此會減少發生但不會消除它)。
關心這些值是一種常見的反模式,您會在許多地方找到更詳細的討論(流行的和推薦的 IMO 書籍“SQL Antipatterns”有一個名為“Pseudokey Neat-Freak”的部分)。