這篇文章給大家介紹SQLite數(shù)據(jù)庫中是rowid使用是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)頁設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺等全方位的服務(wù)。
SQLite數(shù)據(jù)庫中rowid使用
SQLite中每個(gè)表都默認(rèn)包含一個(gè)隱藏列rowid,使用WITHOUT ROWID定義的表除外。通常情況下,rowid可以唯一的標(biāo)記表中的每個(gè)記錄。表中插入的第一個(gè)條記錄的rowid為1,后續(xù)插入的記錄的rowid依次遞增1。即使插入失敗,rowid也會(huì)被加一。所以,整個(gè)表中的rowid并不一定連續(xù),即使用戶沒有刪除過記錄。
由于唯一性,所以rowid在很多場合中當(dāng)作主鍵使用。在使用的時(shí)候,select * from tablename 并不能獲取rowid,必須顯式的指定。例如,select rowid, * from tablename 才可以獲取rowid列。查詢r(jià)owid的效率非常高,所以直接使用rowid作為查詢條件是一個(gè)優(yōu)化查詢的好方法。
但是rowid列作為主鍵,在極端情況下存在隱患。由于rowid值會(huì)一直遞增,如果達(dá)到所允許的最大值9223372036854775807后,它會(huì)自動(dòng)搜索沒有被使用的值,重新使用,并不會(huì)提示用戶。這時(shí),使用rowid排序記錄,會(huì)產(chǎn)生亂序,并引入其他的邏輯問題。所以,如果用戶的數(shù)據(jù)庫存在這種可能的情況,就應(yīng)該使用AUTOINCREMENT定義主鍵,從而避免這種問題。使用AUTOINCREMENT設(shè)置自增主鍵,雖然也會(huì)遇到9223372036854775807問題,但是它會(huì)報(bào)錯(cuò),提示用戶,避免產(chǎn)生rowid所引發(fā)的問題。
關(guān)于SQLite數(shù)據(jù)庫中是rowid使用是怎樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。