SQLite資料庫中rowid使用

大學霸發表於2017-04-17
SQLite資料庫中rowid使用

SQLite中每個表都預設包含一個隱藏列rowid,使用WITHOUT ROWID定義的表除外。通常情況下,rowid可以唯一的標記表中的每個記錄。表中插入的第一個條記錄的rowid為1,後續插入的記錄的rowid依次遞增1。即使插入失敗,rowid也會被加一。所以,整個表中的rowid並不一定連續,即使使用者沒有刪除過記錄。

由於唯一性,所以rowid在很多場合中當作主鍵使用。在使用的時候,select * from tablename 並不能獲取rowid,必須顯式的指定。例如,select rowid, * from tablename 才可以獲取rowid列。查詢rowid的效率非常高,所以直接使用rowid作為查詢條件是一個最佳化查詢的好方法。

但是rowid列作為主鍵,在極端情況下存在隱患。由於rowid值會一直遞增,如果達到所允許的最大值9223372036854775807後,它會自動搜尋沒有被使用的值,重新使用,並不會提示使用者。這時,使用rowid排序記錄,會產生亂序,並引入其他的邏輯問題。所以,如果使用者的資料庫存在這種可能的情況,就應該使用AUTOINCREMENT定義主鍵,從而避免這種問題。使用AUTOINCREMENT設定自增主鍵,雖然也會遇到9223372036854775807問題,但是它會報錯,提示使用者,避免產生rowid所引發的問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-2137380/,如需轉載,請註明出處,否則將追究法律責任。

相關文章