資料庫操作應是所有合格程式員的基本功,寫的一手好SQL對于資料分析師而言更是安身立命之本,大部分軟體開發人員使用的資料庫都是MySql/MariaDB,畢竟LAMP(linux+apache+mysql+php)曾經風靡一時,但開發人員真正的瑞士小軍刀卻是SQLite,它是世界上裝機量第一的嵌入式資料庫,
SQLite最初的構思是在一條軍艦上進行的,當時在通用動力作業的SQLite的作者D.RichardHipp正在為美國海軍編制一種在導彈驅逐艦上使用的程式,那個程式最初運行在HewlettPackard UNX(HPUX)上,后臺使用Infomix資料庫,對那個具體應用而言Informix有點兒太強大了,一個有經驗的資料庫管理員安裝或升級Informix可能需要一整天,其實這個應用需要的只是一個自我包含的資料庫,它易使用并能由程式控制,2000年1月Hipp開始和一個同事討論關于創建一個簡單的嵌入式SQL資料庫的想法,這個資料庫將使用C語言開發,同時這個資料庫將不需要安裝和管理支持,
◆2000年8月SQlite1.0發布,Hipp用B-tree替換了gdbm,
◆2004年SQlite從2.0升級到3.0,這個版本重點強化了國際化,程式體積繼續保持240KB,
SQLite對標的不是MySQL、Oracle這類C/S結構資料庫,而是檔案系統,這樣的場景基本都是對資料庫高級特性(擴展、并發、權限)沒什么需求時方便使用的,
經典的應用場景如下:
◆嵌入式資料庫,開箱即用,sqlite資料庫本身很小(windows下只有4Mb左右,主流linux都自帶sqlite),
◆資料量不多的情況下,如果系統只幾萬甚至幾千條資料時,用sqlite是最適合的,
◆app中使用sqlite做快取資料的存放,如登陸資料快取,歷史資料快取等,
從2000年5月29日開始,SQLite就選擇了C語言,直到今天,C也是實作SQLite這樣軟體庫的最佳語言,
主要原因包括:
◆性能,像SQLite這樣被密集使用的基礎庫需要有很好的性能,因為它對標于檔案系統、甚至于記憶體操作,C語言很適合寫這樣有性能要求的程式,C語言有時被稱為「便攜式匯編語言」,讓開發者能盡可能的接近底層硬體編碼,同時保證跨平臺的便攜性,當然,也有其他的編程語言聲稱和C一樣快或者更快,但沒有一個能和C一樣通用,
◆兼容性,目前幾乎所有的系統都可以呼叫由C語言撰寫的庫,
◆低依賴性,用C來撰寫庫不會在運行時有太多的依賴,在最小的配置下,SQLite只需要C標準庫里屈指可數的幾個函式,
◆穩定性,這個穩定性是指語言的穩定性,C語言相對老舊但非常成熟可靠,但卻正好很適合開發像SQLite這樣更注重長期穩定的模塊,
SQLite安裝極為簡單:
◆linux:不用安裝,直接在命令列下輸入sqlite3即可使用,
◆windows:訪問SQlite官網,從Windows區下載預編譯的二進制檔案,需要下載sqlite-tools-win32-*.zip、sqlite-dll-win32-*.zip壓縮檔案,創建檔案夾C:\sqlite,并在此檔案夾下解壓上面兩個壓縮檔案,將得到sqlite3.def、sqlite3.dll和sqlite3.exe檔案,添加C:\sqlite到PATH環境變數,最后在命令提示符下,使用sqlite3命令即可,
SQlite的使用也非常簡單,直接使用命令進行相關的操作,
# 創建資料庫 sqlite3 demo.db # 顯示資料庫 .database # 創建表 create table demo_table(id int,name text); # 插入資料 insert into demo_table values(1,"chen"); # 查詢 select * from demo_table; # 退出 .quit
如果不喜歡使用命令列工具,也可以使用IDE工具,在VSCODE中,有專用的擴展支持如下圖所示,非常方便,

sqlite的不足包括:
◆不支持right join,當然left join是完全可以替代的,
◆視圖(view)、觸發器(trigger)功能受限,
◆事務處理能力受限(相較MySQL中的4種隔離級別而言),
◆安全性不高,不具有MySQL中詳細的權限管理功能,甚至sqlite資料檔案的訪問無需用戶名密碼,
◆支持的資料型別較少,SQLite原生支持5中資料型別:NULL、INTEGER、REAL、TEXT、BLOB,在SQLite中,所有資料最終都轉化為該5中型別進行存盤,在SQLite中不支持BOOLEAN,在存盤時,會將false轉換為0,true轉換為1,同時SQLite不支持Date和Time資料型別,但是內置提供了一些時間操作函式,幫助用于轉換為其他資料型別進行存盤,
◆不建議基于網路的資料庫訪問,SQLite通常是內置在應用程式中的,如果資料和應用程式是分離的,則訪問資料就需要訪問網路,這樣也是可行的,但不是最優選擇,當資料和應用程式是分開在不同的物理設備上時,通常不選擇SQLite,
◆不建議高并發時使用,
◆不建議用于大資料庫的場景,畢竟超過150T,SQLite是無法承受的,
然而,盡管sqlite在功能完整性方面并不足以與其他關系型資料庫相媲美,但考慮其拿來即用的特點,不失為程式員開發中的瑞士軍刀,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539826.html
標籤:Python
