我想在SQLite表中插入一些數據,其中一列保留字符串值,另一列保留序列號。有什麼方法可以按順序在sqllite表中插入數據嗎?
SQLite文檔說,autoincrement不保證順序插入。 我不想跟蹤以前插入的序列號。
有沒有什麼方法可以順序存儲數據,而不需要跟蹤以前插入的行?
我想在SQLite表中插入一些數據,其中一列保留字符串值,另一列保留序列號。有什麼方法可以按順序在sqllite表中插入數據嗎?
SQLite文檔說,autoincrement不保證順序插入。 我不想跟蹤以前插入的序列號。
有沒有什麼方法可以順序存儲數據,而不需要跟蹤以前插入的行?
簡短的回答是,你說得對,autoincrement documentation明確表示INTEGER PRIMARY KEY AUTOINCREMENT
會不斷增加,但正如你指出你使用,不一定是順序的。所以你顯然不得不修改你的代碼,所以它不依賴於順序值(這可能是正確的行爲),或者你必須自己維護自己的順序標識符。我相信那不是你要找的答案,但我認爲這是現實情況。
如果您將數據按順序插入SQLite數據庫,它們將按順序存儲。
從文檔:the automatically generated ROWIDs are guaranteed to be monotonically increasing.
因此,舉例來說,如果你想有一個表Person
,那麼你可以使用下面的命令來創建表自動增量。
CREATE table PERSON (personID integer PRIMARY KEY AUTOINCREMENT, personName string)
簡短的回答:不要再擔心在AUTOINCREMENT ID序列的空白。處理事務數據庫時它們是不可避免的。
長答案: SQLite無法保證AUTOINCREMENT總是會增加1,原因是事務。
假設您有兩個數據庫連接,幾乎同時啓動2個並行事務。第一個獲得了一些AUTOINCREMENT ID並且它變成先前使用的值+1。一秒鐘後,第二筆交易獲得下一個ID,現在是+2。現在設想第一個事務由於某種原因回滾(遇到一些錯誤,代碼決定放棄它,程序崩潰等)。之後,第二筆交易將提交id +2,從而在id編號方面產生差距。
現在,如果這種並行事務的數量高於2,那該怎麼辦?你無法預測,而且你也無法告訴當前正在運行的事務重用那些沒有任何原因使用的ID。
嗯。後來在那篇文章中它說:「請注意'單調遞增'並不意味着ROWID總是增加1。」我認爲這是OP所關心的條款。 – Rob
同意Rob。 – Ashwani