學習使用SQLite(版本3.7.4)(中J)

來源:互聯網
上載者:User

事務的類型:

             事務三種不同的類型,以不同的鎖狀態啟動事務。

             在begin命令中指定事務類型:begin  [ deferred |  immediate | exclusive  ]  transaction ;

                 deferred必須到使用是才能擷取鎖。預設從未鎖定狀態開始。以deferred開始的事務,是延遲的,停留在未鎖定狀態。多個串連可以在同時刻未建立任何鎖的情況下開始延遲事務。這種情況下,第一個對資料庫的讀操作擷取共用鎖定,第一個對資料庫的寫操作擷取預留鎖。

                 immediate事務在begin的時候就視圖擷取預留鎖。若成功,begin   immediate保證無其他串連寫資料庫,但是其他串連可以讀取資料庫。預留鎖的另一個結果是沒有其他串連能成功啟動begin    immediate或者 begin  exclusive命令,當其他串連執行上述命令時,SQLite會返回SQLite_busy錯誤。這時候可以修改資料庫,但不能提交,使用commit時會有SQLite_busy錯誤。也就是說,還沒有讀事務完成,得繼續等待。

                 exclusive事務會試著擷取獨佔鎖定,類似於immediate事務,值得注意的是,在擷取獨佔鎖定後,資料庫沒其他的活動連結,本串連可以任意讀寫資料庫。

 

資料庫管理:

              附加資料庫:

              SQLite允許利用attach命令將多個資料庫定位”附加“到當前串連上,在全域範圍內他的內容都是可取的。

              文法形式: attach  [database]  filename  as  database_name;

              filename是SQLite資料庫的檔案名稱和路徑,database_name 是要引用的資料庫和對象的邏輯名稱。主要資料庫自動賦名為main。如果建立臨時對象,SQLite會自動建立一個附加的資料庫,並且命名為temp。邏輯名稱可以用來引用附加資料庫內的對象,於此同時,引用附加資料庫的對象必須提供邏輯名。這個在兩個資料庫中有相同的表的時候,很管用。

               

              使用全名引用資料庫中的對象:

             

              分離資料庫:

              detach  [database]   database_name;

            

           

             資料庫清理:

             命令:reindex(用於重建索引,重建所有使用指定排序名稱的索引) 和 vacuum (重構資料庫清理未使用的空間 ,開放狀態的事務,vacuum是不執行的)。

             reindex的用法:reindex      collation_name;

                                          reindex       table_name |  index_name ;

             vacuum的用法:  VACUUM  
[index-or-table-name]

    

    資料庫配置:

    SQLite沒有設定檔,其所有的配置參數都是利用pragma實現的。這個pragma有著命令和變數的特點。

    編譯指示中的常用的內容:

      a,串連緩衝區大小:

        控制一個串連可以在記憶體中使用多少個資料庫頁。方式:pragma cache_size;

        注意:可以使用default_cache_size編譯指示來預設所有的串連設定永久緩衝區的大小。

        這種設定可以儲存於資料庫中,只是對以後的串連生效,對當前的串連不起作用。緩衝其實可以在事務為預留鎖的時候,儲存待定的變

        化。緩衝區大對於擷取獨佔鎖定之前能做的事情量是有鼓勵的。

     b, 擷取資料庫資訊:

        database_list : 擷取所有附著的資料庫,

         為看的清楚起見,我把臨時建立的資料庫temp.db附加到test.db上了。

        index_info    : 列舉出索引內欄位的相關資訊。索引名作為參數,

        index_list    : 列出表中的索引資訊。表名作為參數。

        table_info    : 列出表中所有欄位的相關資訊。

        

    c,寫同步:

       通常,SQLite會在關鍵時刻將所有的變化提交到磁碟保證事務的持久性。但是,因為影響效能,可以考慮關閉這個功能。

       編譯指示synchronous來實現。該編譯指示的三種設定:full ,  normal ,off。

       full:在繼續前,在關鍵點暫停以確保所有的資料實際寫入磁碟。確保了即使系統崩潰或者電力中斷,重啟後資料庫依然是未損的。很安全,但慢。

       normal:在大多關鍵點暫停,但是不太頻繁了。某個電力中斷可能導致資料庫受損。實際中,可能會遭受嚴重的磁碟操作失敗或者其他不課恢複的硬體故障。

       off:將資料拋給OS後立即繼續工作。加速50倍左右,但是問題是,如果運行SQLite的應用程式崩潰,資料依然是安全的。如果系統崩潰或者停電,可能會導致資料損毀。

    d,臨時儲存空間:

       儲存臨時資料(臨時的表、索引、其他對象)的地方。

       兩個編譯指示控制臨時儲存空間:

       temp_store :決定是使用記憶體還是磁碟作為臨時儲存空間;三個選項:default(使用內編譯的預設項),file(使用OS檔案),memory

(使用記憶體);

       temp_store_directory:儲存臨時檔案的目錄,但是在file作為儲存介質的情況下。

    e,頁大小、編碼和自動清理:

      必須在建立資料庫前設定。

      資料庫大小可以通過auto_vacuum自動保持在最小。啟動auto_vacuum時,刪除的事務提交時,資料庫會變小。vacuum對使用auto_vacuum的資料庫不起作用。

    f,調試:

      四個調試的編譯指示:integrity_check 可查看次序顛倒的記錄、缺失、畸形記錄、損毀的索引等。如果損毀,返回描述問題的字串,如正常,返回ok。其他編譯指示追蹤解析器和虛擬資料庫引擎,只要資料庫編譯時間啟用了調試資訊,就可以啟用這些編譯指示。

     

系統目錄:

     系統資料表:sqlite_master,包含所有表、視圖、索引和觸發器的資訊。

     

     rootpage指的是對象的第一個B-tree頁面在資料庫檔案中的位置。

    

查看查詢計劃:

     利用explain query plan查看SQLite執行查詢的方法。在此命令後加上查詢文本。

     

   

 

 

     ----------------------------《over》-------------------------------             

          小記:曆時20天,共計21篇。還會在後面繼續寫,直到深入核心,讀懂源碼。最後,學習PHP,利用PHP+SQLite+……構架網站,這是後話。源碼是目前的重點。

     

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.