關於設計與概念(對前面來轉載自MRDB前輩的文章)的補充:
注意預查詢幾個比較重要的c API函數:sqlite3_prepare_v2( );sqlite3_step( ) ; sqlite_finalize( )。
臨時儲存空間:
查詢處理的重要組成部分。RAM或者一個簡單的檔案,由編譯指示命令temp_store來選擇,在選擇檔案為儲存基礎時,通過temp_store_directory來,明確表示在哪裡建立隱藏檔。
預留位置的使用:
預設使用null。
封裝查詢的幾個函數:sqlite3_exec( ) ;sqlite3_get_table( ) ;
前一個函數不返回資料,第二個函數返回資料,還有就是記憶體佔用比較大。
錯誤處理:
sqlite_error 和 sqlite_busy。
注意錯誤處理:sqlite_errcode( ) ; sqlite_errmsg( ) 。
sqlite語句格式化:
注意 sqlite3_mprintf( ) 及其函數文檔;
在這裡可能會發生SQL注入攻擊。
從備份中恢複資料庫。
可操作的控制:
功能由回呼函數實現:
sqlite3_commit _hook( ), sqlite3_rollback_hook( ) ; sqlite_update_hook ( ) ;分別監視提交、復原、更新。還有一個wal_hook( ) 的鉤子函數,與一般的鉤子函數不太一樣。
重點:sqlite3_authorizer( ) 鉤子函數,這個函數是比較重要的鉤子函數。提供很強的對資料庫控制的細粒度控制,限制功能操作比較強。
使用線程:
共用快取模式。
建立使用者自訂函數:
sqlite3_create_function( )函數的應用;
可以將使用者自訂函數嵌入到check約束中。
建立使用者自訂彙總:
主冊, 實現, 調用。
建立使用者自訂排序:
函數sqlite3_create_collation( ) ;
三種定序:binary 、 nocase 、rtrim 。
讀事務和寫事務:
sqlite在資料庫檔案中有著三種不同的檔案鎖:保留位元組、待定位元組和一個共用地區。
繁忙處理:
做些其他的事情。小心蠻力的使用。
鎖與網路檔案系統:
SQLite依賴於檔案管理系統並發使用的鎖。不論什麼樣的檔案試聽,SQLite使用相同的鎖機制。
finalizer()函數:
事務或者鎖定的邊界,它們開始事務,結束事務。擷取鎖,釋放鎖。
共用快取模式:
關於單個線程中多個串連同時進行的問題。
該模式下,可以建立一個線程的共用相同頁面緩衝的多個串連。改組串連可以在同時同資料庫中有多個讀操作和一個寫操作,但是都只是單純的限制在本線程內,線程之間不能分享。
共用快取模式是專門為某種情況下,需還要保留記憶體同時以後稍高並發的嵌入式伺服器設計的。
應該記住的是:
核心API圍繞兩個基本的用於執行SQL命令的資料結構:連結和語句。
命令執行的三個步驟:編譯、執行、完成。
sqlite的封轉函數exec()和get_table( )將這三步封裝為一個函數調用,自動處理相關聯的語句對象。
API擴充提供了三種不同的自訂SQLite的方式:使用者自訂函數、使用者自訂彙總、使用者自訂定序。
重點在於:
SQLite對於事物和鎖的管理,事物和鎖如何在後台工作的,如何與代碼混合使用等。
---------------------------------分--------------------------割-------------------線-------------------------------------------------