狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SQLite 入門教程

freeflydom
2024年2月24日 16:12 本文熱度 676

不是 MySQL 用不起,而是 SQLite 更有性價比,絕大多數的 Web 應用 SQLite 都可以滿足。

SQLite 是一個用 C 語言編寫的開源、輕量級、快速、獨立且高可靠性的 SQL 數據庫引擎,它提供了功能齊全的數據庫解決方案。SQLite 幾乎可以在所有的手機和計算機上運行,它被嵌入到無數人每天都在使用的眾多應用程序中。

此外,SQLite 還具有穩定的文件格式、跨平臺能力和向后兼容性等特點。SQLite 的開發者承諾,至少在 2050 年之前保持該文件格式不變。

本文將介紹 SQLite 的基礎知識和使用方法。

SQLite 安裝

在 SQLite 官方頁面(https://sqlite.org/download.html) 下載適合你目標系統的壓縮包。

下載并解壓后,無論是在 Windows、Linux 還是 Mac OS 系統上,你都可以得到一個 sqlite3 命令行工具。

以下是在 Mac OS 上解壓后得到的命令行工具示例:

➜  sqlite-tools-osx-x64-3450100 ls -l
total 14952
-rwxr-xr-x@ 1 darcy  staff  1907136  1 31 00:27 sqldiff
-rwxr-xr-x@ 1 darcy  staff  2263792  1 31 00:25 sqlite3
-rwxr-xr-x@ 1 darcy  staff  3478872  1 31 00:27 sqlite3_analyzer

SQLite 使用場景

SQLite 與客戶端/服務器類型的 SQL 數據庫引擎(例如 MySQL、Oracle、PostgreSQL 或 SQL Server)不同,它們解決的問題也不同。

服務器端的 SQL 數據庫引擎旨在實現企業級數據的共享存儲,它們強調的是可擴展性、并發性、集中化和控制性。相比之下,SQLite 通常用于為個人應用程序和設備提供本地數據存儲,它強調的是經濟、高效、可靠、獨立和簡單。

SQLite 的使用場景:

  1. 嵌入式設備和物聯網

    SQLite 不需要額外的管理或服務啟動,非常適合用在手機、電視、機頂盒、游戲機、相機、手表等智能設備上。

  2. 網站

    多數低流量網站可以使用 SQLite 作為數據庫。根據官方網站的介紹,通常每天訪問量少于 10 萬次的網站都可以很好地運行 SQLite。SQLite 的官方網站(https://www.sqlite.org/)自身就使用 SQLite 作為數據庫引擎,每天處理大約 50 萬 HTTP 請求,其中約 15-20% 的請求涉及數據庫查詢

  3. 數據分析

    SQLite3 命令行工具能方便地與 CSV 和 Excel 文件進行交互操作,適合分析大數據集。同時,許多語言(如 Python)都內置了 SQLite 支持,可以輕松編寫腳本進行數據操作。

  4. 緩存

    SQLite 可以作為應用服務的緩存,減輕對中心數據庫的壓力。

  5. 內存或者臨時數據庫

    得益于 SQLite 的簡單快速,非常使用程序演示或者日常測試。

SQLite 不適合的場景包括

  1. 需要通過網絡訪問數據庫的情況。SQLite 是一個本地文件數據庫,沒有提供遠程訪問功能。

  2. 要求高可用性和可擴展性的場合。SQLite 簡單易用,但不可擴展。

  3. 數據量極大時。盡管 SQLite 數據庫大小的限制高達 281 TB,但所有數據都必須存儲在單個磁盤上。

  4. 寫入操作高并發時。SQLite 在任何時刻只允許一個寫入操作執行,其他寫入操作需要排隊。

SQLite3 命令操作

SQLite 提供了 sqlite3(在windows 為 sqlite3.exe)命令行工具,通過該工具可以執行 SQLite 數據庫操作和 SQL 語句。

直接在命令提示符下執行 ./sqlite3 啟動 sqlite3 程序,然后可以通過輸入 .help 查看幫助指南,或者輸入 .help 關鍵詞 獲取特定關鍵詞的幫助信息。

部分命令列表如下:

sqlite> .help.databases               List names and files of attached databases
.dbconfig ?op? ?val?     List or change sqlite3_db_config() options
.dbinfo ?DB?             Show status information about the database
.excel                   Display the output of next command in spreadsheet
.exit ?CODE?             Exit this program with return-code CODE
.expert                  EXPERIMENTAL. Suggest indexes for queries
.explain ?on|off|auto?   Change the EXPLAIN formatting mode.  Default: auto
.help ?-all? ?PATTERN?   Show help text for PATTERN
.hex-rekey OLD NEW NEW   Change the encryption key using hexadecimal
.indexes ?TABLE?         Show names of indexes
.mode MODE ?OPTIONS?     Set output mode
.open ?OPTIONS? ?FILE?   Close existing database and reopen FILE
.output ?FILE?           Send output to FILE or stdout if FILE is omitted
.quit                    Exit this program
.read FILE               Read input from FILE or command output
.schema ?PATTERN?        Show the CREATE statements matching PATTERN
.show                    Show the current values for various settings
.tables ?TABLE?          List names of tables matching LIKE pattern TABLE
.......

sqlite3 只是讀取輸入行信息,然后傳遞給 SQLite 庫來執行,SQL 語句都要以分號 ; 結尾才會開始執行,因此你可以自由的分行輸入。

在 sqlite3 中,SQL 語句需以分號 ; 結尾才會執行,允許跨行輸入。特殊的點命令(如 .help 和 .tables)以小數點 . 開頭,不需要分號。

SQLite 新建數據庫

直接執行 sqlite3 filename 打開或創建一個 SQLite 數據庫。如果文件不存在,SQLite 會自動創建它。

示例:打開或創建名為 my_sqlite.db 的 SQLite 數據庫文件。

$ sqlite3 my_sqlite.dbSQLite version 3.39.5 2022-10-14 20:58:05
Enter ".help" for usage hints.sqlite>

也可以首先創建一個空白文件,然后使用 sqlite3 命令打開它。接下來使用 CREATE TABLE 命令創建一個名為 user 的表,用 .tables 命令查看現有表格,使用 .exit 退出 sqlite3 工具。

$ touch test.db
$ sqlite3 test.db
SQLite version 3.39.5 2022-10-14 20:58:05Enter ".help" for usage hints.
sqlite> create table user(name text,age int);
sqlite> .tablesusersqlite>

SQLite 查看當前數據庫

使用點命令 .databases 查看當前打開的數據庫。

sqlite> .databases
main: /Users/darcy/develop/sqlite-tools-osx-x86-3420000/my_sqlite.db r/w
sqlite>

SQLite 增刪改查

SQLite 幾乎完全兼容常見的 SQL 語句規范,因此可以直接編寫和執行標準的 SQL 語句。

創建表:

sqlite> create table user(name text,age int);
sqlite>

插入數據:

sqlite> insert into user values('aLang',20);
sqlite> insert into user values('Darcy',30);
sqlite> insert into user values('XiaoMing',40);

查詢數據:

sqlite> select * from user;
aLang|20Darcy|30XiaoMing|40

添加索引,為 user 表的 name 創建名為 user_name 的索引:

sqlite> create index user_name on user(name);

SQLite 更改輸出格式

在查詢數據時,SQLite 默認使用 | 分割每列數據,這可能不便于閱讀。實際上,sqlite3 工具支持多種輸出格式,默認為 list 模式。

以下是可用的輸出格式:ascii、box、csv、column、html、insert、json、line、list、markdown、quote、table。

可以使用 .mode 命令更改輸出格式。

Box 格式:

sqlite> .mode box
sqlite> select * from user;
┌──────────┬─────┐
│   name   │ age │
├──────────┼─────┤
│ aLang    │ 20  │
│ Darcy    │ 30  │
│ XiaoMing │ 40  │
└──────────┴─────┘

json 格式:

sqlite> .mode json
sqlite> select * from user;
[{"name":"aLang","age":20},
{"name":"Darcy","age":30},
{"name":"XiaoMing","age":40}]

column 格式:

sqlite> .mode columnsqlite> select * from user;
name      age--------  ---aLang     20Darcy     30XiaoMing  40

table 格式:

sqlite> .mode tablesqlite> select * from user;+----------+-----+|   name   | age |+----------+-----+| aLang    | 20  || Darcy    | 30  || XiaoMing | 40  |+----------+-----+sqlite>

查詢 Schema

sqlite3 工具提供了幾個方便的命令,可用于查看數據庫的 schema ,這些命令純粹作為快捷方式提供。

例如,.table 查看數據庫中的所有表:

sqlite> .tableuser

點命令 .table 相當于下面的查詢語句。

sqlite> SELECT name FROM sqlite_schema
   ...> WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
   ...> ;user

sqlite_master 是 SQLite 中的一個特殊表,其中包含了數據庫的 schema 信息。你可以查詢這個表以獲取表的創建語句和索引信息。

sqlite> .mode tablesqlite> select * from sqlite_schema;+-------+-----------+----------+----------+--------------------------------------+| type  |   name    | tbl_name | rootpage |                 sql                  |+-------+-----------+----------+----------+--------------------------------------+| table | user      | user     | 2        | CREATE TABLE user(name text,age int) || index | user_name | user     | 3        | CREATE INDEX user_name on user(name) |+-------+-----------+----------+----------+--------------------------------------+

使用 .indexes 查看索引,使用 .schema 查看 schema 詳情。

sqlite> .indexes
user_name
sqlite> .schemaCREATE TABLE user(name text,age int);CREATE INDEX user_name on user(name);

結果寫出到文件

使用 .output filename 命令將查詢結果寫入指定文件。

下面是一個示例,先使用 .mode json 更改輸出為 JSON 格式,然后在查詢表寫出到 sql_result.json。

sqlite> .output sql_result.json
sqlite> .mode json
sqlite> select * from user;
sqlite> .exit
$ cat sql_result.json
[{"name":"aLang","age":20},
{"name":"Darcy","age":30},
{"name":"XiaoMing","age":40}]

**寫出并打開 EXCEL **

使用 .excel 會讓下一個查詢語句輸出到 Excel 中。

sqlite> .excel
sqlite> select * from sqlite_schema;

結果寫出到文件

sqlite> .output sql_result.txt
sqlite> select * from sqlite_schema;
sqlite> select * from user;

讀取運行 SQL 腳本

使用 .read 可以讀取指定文件中的 SQL 語句并運行,這在需要批量執行 SQL 腳本的場景中非常有用。

創建SQL文件:

$ echo "select * from user" > sql_query.sql$ cat sql_query.sqlselect * from user$ ./sqlite3 my_sqlite.dbSQLite version 3.42.0 2023-05-16 12:36:15
Enter ".help" for usage hints.sqlite> .mode tablesqlite> .read sql_query.sql+----------+-----+
|   name   | age |
+----------+-----+
| aLang    | 20  |
| Darcy    | 30  |
| XiaoMing | 40  |
+----------+-----+sqlite>

SQLite 備份與恢復

在涉及數據庫操作時,備份和恢復是至關重要的步驟,它們用于防止數據丟失并確保數據的持續性。SQLite 提供了簡單的方法來備份和恢復你的數據庫。

在 SQLite 中可以通過導出整個數據庫為一個 SQL 腳本來備份數據庫。此功能使用 .dump 命令實現。

$ ./sqlite3 my_sqlite.db
SQLite version 3.42.0 2023-05-16 12:36:15Enter ".help" for usage hints.
sqlite> .output backup.sql
sqlite> .dump
sqlite> .exit
$ cat backup.sql
PRAGMA foreign_keys=OFF;BEGIN TRANSACTION;CREATE TABLE user(name text,age int);INSERT INTO user VALUES('aLang',20);INSERT INTO user VALUES('Darcy',30);INSERT INTO user VALUES('XiaoMing',40);CREATE INDEX user_name on user(name);COMMIT;

這將導出整個 my_sqlite.db 數據庫到 backup.sql 文件中。此 SQL 文件包含了重建數據庫所需的所有 SQL 語句。要恢復數據庫,只需在 sqlite3 中運行這個腳本。

示例:恢復數據到庫 my_sqlite_2 中。

$ ./sqlite3 my_sqlite_2.db
SQLite version 3.42.0 2023-05-16 12:36:15Enter ".help" for usage hints.
sqlite> .read backup.sql
sqlite> select * from user;
aLang|20Darcy|30XiaoMing|40

這將執行 backup.sql 文件中的所有 SQL 語句,重建數據庫。通過以上的備份與恢復方法,你可以確保你的 SQLite 數據庫資料得到可靠的保護,且在需要時能夠迅速恢復。

SQLite 可視化工具

命令行操作總歸不太直觀,如果你喜歡可視化操作,可以下載 SQLite Database Browser 進行操作。

下載頁面:https://sqlitebrowser.org/dl/

附錄

SQLite 常用函數列表,見名知意不寫注釋了。

Function 1Function 2Function 3Function 4
abs(X)changes()char(X1,X2,...,XN)coalesce(X,Y,...)
concat(X,...)concat_ws(SEP,X,...)format(FORMAT,...)glob(X,Y)
hex(X)ifnull(X,Y)iif(X,Y,Z)instr(X,Y)
last_insert_rowid()length(X)like(X,Y)like(X,Y,Z)
likelihood(X,Y)likely(X)load_extension(X)load_extension(X,Y)
lower(X)ltrim(X)ltrim(X,Y)max(X,Y,...)
min(X,Y,...)nullif(X,Y)octet_length(X)printf(FORMAT,...)
quote(X)random()randomblob(N)replace(X,Y,Z)
round(X)round(X,Y)rtrim(X)rtrim(X,Y)
sign(X)soundex(X)sqlite_compileoption_get(N)sqlite_compileoption_used(X)
sqlite_offset(X)sqlite_source_id()sqlite_version()substr(X,Y)
substr(X,Y,Z)substring(X,Y)substring(X,Y,Z)total_changes()
trim(X)trim(X,Y)

參考

  1. SQLite 開源代碼:https://www.sqlite.org/cgi/src/dir?ci=trunk

  2. SQLite 文件格式介紹:https://sqlite.org/fileformat2.html

  3. SQLite 可視化工具:https://sqlitebrowser.org/dl/

  4. SQL 函數文檔:https://www.sqlite.org/lang_corefunc.html

一如既往,文章中代碼存放在 Github.com/niumoo/javaNotes.


本文作者:程序猿阿朗,轉自https://www.cnblogs.com/niumoo/p/18028632


該文章在 2024/2/24 16:12:47 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved