SQLite 是一個開源,多平台,免費和小型C庫,它實現了一個自包含,可嵌入,事務性,無服務器和零配置的SQL數據庫引擎。它是世界上最常用的SQL數據庫引擎。
功能一目了然
主要功能包括支持隔離,原子,持久和一致的事務,SQL92實現,數據庫文件可以在計算機之間自由共享,支持最大2 TB的數據庫,支持千兆字節大小的blob和字符串,代碼佔用空間小,如以及易於使用且非常簡單的API(應用程序編程接口)。
此外,SQLite不需要初始配置或進一步管理,允許開發人員將完整的數據庫存儲在單個跨平台磁盤文件中,這對於使用應用程序文件格式是完美的,沒有外部依賴性,附帶內置 - 在TCL(工具命令語言)綁定和全面的文檔。
許多其他編程語言的綁定可單獨提供。它的源代碼經過充分評論,並附帶一個獨立的CLI(命令行界面)客戶端,該客戶端是根據偏移量設計的,用於管理SQLite數據庫。
我可以用它做什麼?
SQLite數據庫引擎可用於任何目的,個人或商業用途。 SQLite的建議用途包括小工具數據庫,網站數據庫,企業RDBMS(關係數據庫管理系統)的替代,以及應用程序文件格式。
引擎蓋和支持的操作系統
SQLite發行版附帶一個獨立的命令行訪問程序(sqlite),可用於管理SQLite數據庫,並作為如何使用SQLite庫的示例。它完全用ANSI-C編程語言編寫。
支持的桌面操作系統包括GNU / Linux,Mac OS X和Microsoft Windows。支持的移動操作系統包括Android和iOS。它已成功通過32位和64位硬件平台進行測試,並且可輕鬆移植到其他操作系統。
此版本中的新功能:
- 此版本的亮點包括支持PostgreSQL風格的UPSERT和改進的性能,特別是對於ORDER BY LIMIT查詢。
版本中的新功能:
- 充分利用F2FS文件系統中的原子寫入功能,大大降低了事務開銷。這當前需要SQLITE_ENABLE_BATCH_ATOMIC_WRITE編譯時選項。
- 允許ATTACH和DETACH命令在事務內部工作。
- 如果PRIMARY KEY只包含一列,則允許WITHOUT ROWID虛擬表可寫。
- “fsync()”在WAL重置中寫入標頭後發生的情況現在使用檢查點的同步設置。這意味著它將使用“fullfsync”。如果PRAGMA checkpoint_fullfsync設置為on,則在mac上。
- sqlite3_sourceid()函數嘗試檢測源代碼是否已從檢查到版本控制的內容進行修改,如果有修改,則版本哈希的最後四個字符顯示為“alt1”。或“alt2”。目標是檢測意外和/或粗心編輯。偽造者可以破壞此功能。
- 使用右側的聚合查詢改進了對CREATE TABLE AS語句的列名的取消引用。
- 更少“stat()”系統調用由unix VFS發出。
- 增強了LIKE優化,使其適用於ESCAPE子句。
- 增強了PRAGMA integrity_check和PRAGMA quick_check,以檢測以前缺少的模糊行損壞。同時更新兩個編譯指示,以便在遇到記錄損壞時返回錯誤文本而不是SQLITE_CORRUPT。
- 查詢規劃器現在更喜歡使用協同例程而不是使用查詢拼合器優化來實現FROM子句子查詢。可能不再禁用對子查詢使用協同例程的支持。
- 將有關!=,IS,IS NOT,NOT NULL和IS NULL約束的信息傳遞給虛擬表的xBestIndex方法。
- 增強了CSV虛擬表,以便在缺少最終換行符時接受最後一行輸入。
- 刪除很少使用的“划痕”。內存分配器。將其替換為SQLITE_CONFIG_SMALL_MALLOC配置設置,該設置為SQLite提供了一個提示,即盡可能避免大量內存分配。
- 將swarm虛擬表添加到現有的聯合虛擬表擴展名。
- 添加了sqlite_dbpage虛擬表,用於提供對數據庫文件頁面的直接訪問。源代碼內置於合併中,並使用-DSQLITE_ENABLE_DBPAGE_VTAB編譯時選項激活。
- 添加新類型的fts5vocab虛擬表 - " instance" - 可以在盡可能低的水平上直接訪問FTS5全文索引。
- 刪除對Windows VFS中rand_s()的調用,因為它在某些較舊的筆記本電腦上導致Firefox出現問題。
- 命令行shell的src / shell.c源代碼不再受版本控制。該文件現在作為構建過程的一部分生成。
- 其他微優化可將CPU使用率降低約2.1%。
- 錯誤修復:
- 修復OSSFuzz發現的錯誤assert()語句。門票cb91bf4290c211d
- 在sqlite3_result_pointer()中修復一個模糊的內存洩漏。機票7486aa54b968e9b
- 在查詢計劃程序運行完畢之前,通過推遲架構重置來避免可能的釋放後使用錯誤。門票be436a7f4587ce5
- 如果COLLATE正確,則僅使用index-on-expressions來優化ORDER BY或GROUP BY。機票e20dd54ab0e4383
- 修復當表達式索引中的表達式實際上是常量時出現的斷言錯誤。門票aa98619ad08ddca
- 修復PRAGMA reverse_unordered_selects之後可能發生的斷言故障。門票cb91bf4290c211d
- 修復在IN或EXISTS子查詢中使用表值函數的查詢可能發生的段錯誤。票務b899b6042f97f5
- 在編譯特定的可怕公用表表達式時修復潛在的整數溢出問題。這是OSSFuzz發現的另一個問題。辦理登機手續6ee8cb6ae5。
- 在查詢損壞的數據庫文件時修復潛在的越界讀取,這是Google Project Zero的Natalie Silvanovich發現的問題。辦理登機手續04925dee41a21f。
版本3.20.1中的新功能:
- 版本3.20.1補丁版本更改了sqlite3_result_pointer()界面中的兩行代碼,以修復罕見的內存洩漏。
版本3.9.2中的新功能:
- SQLite版本3.9.2是修補兩個模糊錯誤的補丁版本。
版本3.8.9中的
新功能:
- 此版本中的新功能包括PRAGMA index_xinfo命令,sqlite3_status64()接口和命令行shell的“.dbinfo”命令。
版本3.8.8.2中
什麼是新:
- 3.8.8.2修補程序版本修復了一個小問題:它確保sqlite3_wal_checkpoint(TRUNCATE)操作將始終截斷預寫日誌,即使日誌已被重置且不包含新內容。目前還不清楚這是錯誤修復還是新功能。
- 這樣的事情通常會進入下一個定期發布的版本,但是一個著名的SQLite用戶需要匆忙進行更改,所以我們很樂意通過這個補丁來推遲發布。
- 除非您確實需要sqlite3_wal_checkpoint(TRUNCATE)的增強行為,否則沒有理由進行升級。
版本3.8.8.1中的新功能:
- 修復自3.8.4版以來出現的排序邏輯中的錯誤,該錯誤可能導致輸出在包含ORDER BY子句,LIMIT子句且包含大約60個或更多列的查詢中以錯誤的順序出現結果集。票務f97c4637102a3ae72b79。
- SQLITE_SOURCE_ID:“2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55”
- SHA1 for sqlite3.c:33987fb50dcc09f1429a653d6b47672f5a96f19e
版本3.8.8中的
新功能:
- 新功能:
- 添加了PRAGMA data_version命令,該命令可用於確定數據庫文件是否已被其他進程修改。
- 在sqlite3_wal_checkpoint_v2()界面中添加了SQLITE_CHECKPOINT_TRUNCATE選項,並對PRAGMA wal_checkpoint進行了相應的增強。
- 添加了sqlite3_stmt_scanstatus()接口,僅在使用SQLITE_ENABLE_STMT_SCANSTATUS編譯時可用。
- 增強了sqlite3_table_column_metadata()以在WITHOUT ROWID表上正常工作,並在列名參數為NULL時檢查是否存在表。現在,該接口默認包含在構建中,無需SQLITE_ENABLE_COLUMN_METADATA編譯時選項。
- 添加了SQLITE_ENABLE_API_ARMOR編譯時選項。
- 添加了SQLITE_REVERSE_UNORDERED_SELECTS編譯時選項。
- 添加了SQLITE_SORTER_PMASZ編譯時選項和SQLITE_CONFIG_PMASZ啟動時選項。
- 為sqlite3_config()添加了SQLITE_CONFIG_PCACHE_HDRSZ選項,使應用程序更容易確定與SQLITE_CONFIG_PAGECACHE一起使用的適當內存量。
- VALUES子句中的行數不再受SQLITE_LIMIT_COMPOUND_SELECT的限制。
- 添加了eval.c可加載擴展,該擴展實現了一個遞歸評估SQL的eval()SQL函數。
- 性能增強:
- 減少平衡b樹所涉及的memcpy()操作次數,使整體性能提升3.2%。
- 跳過掃描優化的成本估算的改進。
- 如果合適,自動索引優化現在能夠生成部分索引。
- 錯誤修復:
- 通過在截斷日誌文件後立即調用fsync(),確保“PRAGMA journal_mode = TRUNCATE”斷電後的持久性。
- 查詢計劃程序現在可以識別LEFT JOIN右側表中的任何列都可以為NULL,即使該列具有NOT NULL約束也是如此。在這些情況下,避免嘗試優化NULL測試。修復了機票6f2222d550f5b0ee7ed。
- 確保ORDER BY按行按升序排列,即使使用降序索引實現DISTINCT運算符也是如此。修復了機票c5ea805691bfc4204b1cb9e。
- 修復在共享緩存模式下使用多個線程運行時可能在壓力下發生的數據爭用,其中某些線程正在打開和關閉連接。
- 修復美國模糊lop發現的模糊崩潰錯誤。票a59ae93ee990a55。
- 解決GCC優化器錯誤(對於Mac OS 10.7上的gcc 4.2.1)導致R-Tree擴展在使用-O3編譯時計算錯誤結果。
- 其他變化:
- 禁止使用strchrnul()C庫例程,除非使用-DHAVE_STRCHRNULL編譯時選項專門啟用它。
- 對可能性(),可能()和不太可能的()SQL提示函數的有效性和準確性的改進。
- SQLITE_SOURCE_ID:“2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf”
- SHA1 for sqlite3.c:91aea4cc722371d58aae3d22e94d2a4165276905
版本3.8.7.4中的新功能:
- 此版本修復了添加3.8.7.3修補程序更改所需的互斥鎖但卻意外省略的情況。任何內部SQLite測試都不需要互斥鎖,但Firefox沒有它就會崩潰。添加了測試用例以確保永遠不會再次錯過互斥鎖。
版本3.8.7.3中的新功能:
- 錯誤修復:確保緩存的KeyInfo對象(應用程序看不到的內部抽象)在共享緩存模式下運行時不會過時,並且經常關閉並重新打開某些數據庫連接,同時保持同一共享緩存上的其他數據庫連接處於打開狀態不斷。票務e4a18565a36884b00edf。
- 錯誤修復:識別LEFT JOIN右側表中的任何列都可以為NULL,即使該列具有NOT NULL約束也是如此。不應用假定列永遠不為NULL的優化。門票6f2222d550f5b0ee7ed。
- SQLITE_SOURCE_ID:“2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86”
- SHA1 for sqlite3.c:3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
版本3.8.7.2中的
新功能:
- 此版本的主要原因是增強ROLLBACK命令,以便只要ROLLBACK不更改架構,它就允許在同一數據庫連接上運行查詢以繼續運行。在所有以前版本的SQLite中,ROLLBACK會導致掛起的查詢立即停止並返回SQLITE_ABORT或SQLITE_ABORT_ROLLBACK。如果ROLLBACK更改了數據庫架構,則掛起的查詢仍會中止,但是從此修補程序版本開始,如果架構未修改,則允許查詢繼續運行。
- 除了ROLLBACK增強功能之外,此修補程序版本還包含針對三個模糊錯誤的修復程序。
版本3.8.7.1中的新功能:
- 此錯誤修復發布的主要原因是解決使用ALTER TABLE ADD COLUMN更新表末尾的字段值的問題。這個問題1首次出現在3.8.7版本中。
- 3.8.7版本中的另一個小煩惱是Android版本試圖使用標準C庫中的strchrnul()函數,但該功能在Android上不可用。 Android版本必須添加-DHAVE_STRCHRNUL = 0才能解決問題。此補丁修復了這一問題,以便Android版本現在可以正常運行而無需任何更改。
- PRAGMA journal_mode = TRUNCATE的操作已得到增強,因此在PRAGMA synchronous = FULL時截斷日誌文件後會調用fsync()。這有助於在提交後不久發生斷電的情況下保持事務持久性。
- 最後,修復了與VIEW上運行UPDATE和DELETE相關的一些長期存在且模糊不清的問題。
版本3.8.7中的
新功能:
- 上一版本中的大多數更改都是微優化,旨在幫助SQLite運行得更快一些。每個單獨的優化都會產生不可估量的小型性能影響。但這些改進加起來。使用明確定義的工作負載(SQLite開發人員用作典型應用程序工作負載的代理)在Linux上使用cachegrind進行測量,並在x64 linux上使用gcc 4.8.1和-Os編譯,當前版本的工作量增加了20%以上與先前版本相比,CPU週期數相同。 Cachegrind不是真正的CPU,用於測量的工作負載只是一個代理。所以你的表現會有所不同。我們希望在實際應用中看到大約一半的測量和報告的改進。我們認為10%低於20%,但仍然相當不錯。
- 此版本包含一組新的C語言接口,這些接口具有無符號64位而不是帶符號的32位長度參數。新API不提供任何新功能。但它們確實使編寫更能抵抗整數溢出漏洞的應用程序變得更容易。
- 此版本還包括一個新的分揀機,它能夠使用多個線程來幫助進行大型分揀操作。 (有時需要排序操作來實現ORDER BY和/或GROUP BY子句,並且幾乎總是需要CREATE INDEX。)默認情況下,多線程排序器處於關閉狀態,必須使用PRAGMA threads SQL命令啟用。請注意,多線程分揀機為大型分揀機提供了更快的實時性能,但它也使用了更多的CPU週期和更多的能量。
版本3.8.3.1中的新功能:
- SQLite版本3.8.3.1修復了版本3.8.1,3.8.2和3.8.3中存在的錯誤,該錯誤可導致查詢省略有效的輸出行。建議從這些版本升級。
- 如果使用SQLITE_ENABLE_STAT3或SQLITE_ENABLE_STAT4編譯時選項編譯SQLite,則只會出現此問題。在這種情況下,如果查詢的WHERE子句包含如下表達式:
- WHERE(expr1 OR expr2 OR ... OR exprN)AND列IS NOT NULL
- 如果expr1到exprN的所有內容都適合索引使用,那麼在查詢規劃期間,SQLite可能會錯誤地將“列IS NOT NULL”術語轉換為“column> NULL”。但後一個術語永遠不會成立,因此查詢將不返回任何行。
版本3.8.3中
什麼是新:
- 添加了對公用表表達式和WITH子句的支持。
- 添加了printf()SQL函數。
- 在sqlite3_create_function()和相關接口的第4個參數中添加了SQLITE_DETERMINISTIC作為可選位,為應用程序提供了創建新函數的能力,當它們具有常量參數時,可以將這些函數從內部循環中分解出來。
- 添加在事務開始時返回的SQLITE_READONLY_DBMOVED錯誤代碼,以指示已從SQLite下重命名或移出基礎數據庫文件。
- 允許任意表達式,包括函數調用和子查詢,在文件名參數中為ATTACH。
- 允許在SELECT語句有效的任何地方使用VALUES子句。
- 在使用N == 0調用時,重新設定sqlite3_randomness(N,P)使用的PRNG。在unix上的fork()之後自動重新設定。
- 增強spellfix1虛擬表,以便它可以通過rowid高效搜索。
- 性能增強。
- 運行EXPLAIN時對VDBE字節碼顯示中註釋的改進。
- 將“%token_class”指令添加到LEMON解析器生成器並使用它來簡化語法。
- 更改LEMON源代碼以避免調用OpenBSD認為危險的C庫函數。 (例如:sprintf)。
- 錯誤修復:在命令行shell CSV導入功能中,當CRLN行末尾出現轉義雙引號時,請勿結束字段。
- SQLITE_SOURCE_ID:“2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538”
- SHA1 for sqlite3.c:98a07da78f71b0275e8d9c510486877adc31dbee
評論沒有發現