关于SQLite3
- SQLite3是一种轻量级的关系型数据库管理系统(RDBMS),它以跨平台、零配置、服务器-less的方式存储数据
- SQLite3不像其他常见的数据库管理系统,如MySQL或PostgreSQL那样需要一个独立的服务器进程,在应用程序内部直接操作文件来进行数据存储和读取
- SQLite3非常适合于嵌入式设备和单机应用程序等场景,因为它不需要占用太多资源,也允许在不同的平台上运行。 此外,SQLite3支持大多数SQL语法,并且还提供了一些高级功能,如触发器、存储过程等
特性与优势
- 跨平台性:SQLite3可以在多种操作系统和编程语言下使用,包括Windows、Linux、macOS、iOS、Android等
- 零配置:SQLite3的特点之一是不要求任何服务器或网络配置。只需将数据库文件嵌入应用程序即可轻松地访问数据
- 体积小:SQLite3的核心库非常小,通常只有几百KB,因此非常适合在资源受限或空间受限的系统中使用
- 支持SQL:SQLite3支持大多数标准SQL查询语言,使用户能够使用大多数传统数据库管理任务
- ACID兼容:SQLite3支持ACID(原子性、一致性、隔离性和持久性)事务处理,确保数据始终处于一致状态
- 高可靠性:SQLite3对于频繁读取和少量更新的场景,表现出色。由于其自动记录更改,以防止损坏和数据丢失
- 强大的API:SQLite3提供了一个简单易用的C语言API来操作数据库,同时也提供了大量的接口和工具
- 可扩展性:SQLite3允许用户创建自己的函数和存储过程,从而增加了其灵活性和可扩展性
支持的语言与框架
- Python:通过Python的标准库sqlite3,可以在Python中访问SQLite3数据库;
- Java:使用Java JDBC接口或者第三方库JDBC SQLite,可以在Java中访问SQLite3数据库;
- C++:使用C++的SQLite3 API,可以在C++中访问SQLite3数据库;
- .NET:通过ADO.NET提供的SQLite3数据提供程序,可以在.NET平台上访问SQLite3数据库;
- Ruby:通过Ruby的sqlite3 gem,可以在Ruby中访问SQLite3数据库;
- PHP:使用PHP内置的PDO SQLite类或SQLite扩展,可以在PHP中访问SQLite3数据库;
- Node.js:通过node-sqlite3库,在Node.js中访问SQLite3数据库。
- 关于sqlite3 API的使用可以参考官方文档:https://www.sqlite.org/capi3ref.html
下载及安装
- 下载SQLite3二进制文件:可以从SQLite网站的下载页面(SQLite Download Page)下载适用于相应系统的SQLite3二进制文件
- 安装SQLite3二进制文件:
- 对于Windows,只需运行安装程序并按照提示进行即可
- 对于macOS,您需要将二进制文件移动到/usr/local/bin目录中
brewinstallsqlite- 对于Linux,您需要使用包管理器来安装SQLite3软件包
sudoapt-getupdatesudoapt-getinstallsqlite3- 验证SQLite3是否已正确安装:
- 在命令行终端上输入sqlite3命令并回车
- 如果成功安装,则会进入SQLite3的命令行客户端
- 可选地,安装SQLite3 GUI工具:如果您需要一个GUI工具来管理SQLite3数据库,则可以使用一些第三方工具
- SQLiteStudio
- DBeaver
- 这些工具可免费下载和使用
注意:安装sqlite3和安装sqlite3依赖库不是一个概念,安装sqlite3依赖库,需要执行
sudo apt-get install libsqlite3-dev
基础命令
| 命令 | 说明 |
|---|---|
| .archive … | 管理SQL归档文件 |
| .auth ON|OFF | 显示授权回调函数 |
| .backup ?DB? FILE | 将数据库DB(默认为“main”)备份到FILE |
| .bail on|off | 在错误发生后停止。默认为OFF |
| .binary on|off | 打开或关闭二进制输出。默认为OFF |
| .cd DIRECTORY | 将工作目录更改为DIRECTORY |
| .changes on|off | 显示SQL更改的行数 |
| .check GLOB | 如果自从.testcase以来的输出不匹配,则失败 |
| .clone NEWDB | 从现有数据库克隆数据到NEWDB中 |
| .databases | 列出附加数据库的名称和文件 |
| .dbconfig ?op? ?val? | 列出或更改sqlite3_db_config()选项 |
| .dbinfo ?DB? | 显示有关数据库的状态信息 |
| .dump ?TABLE? … | 将所有数据库内容呈现为SQL |
| .echo on|off | 打开或关闭命令回显 |
| .eqp on|off|full|… | 启用或禁用自动EXPLAIN QUERY PLAN |
| .excel | 在电子表格中显示下一个命令的输出 |
| .exit ?CODE? | 以返回代码CODE退出此程序 |
| .expert | 实验性功能。为查询建议索引 |
| .explain ?on|off|auto? | 更改EXPLAIN格式模式。默认值:auto |
| .filectrl CMD … | 运行各种sqlite3_file_control()操作 |
| .fullschema ?–indent? | 显示模式和sqlite_stat表的内容 |
| .headers on|off | 打开或关闭标题的显示 |
| .help ?-all? ?PATTERN? | 显示有关PATTERN的帮助文本 |
| .import FILE TABLE | 将数据从FILE导入TABLE |
| .imposter INDEX TABLE | 在索引INDEX上创建仿冒表TABLE |
| .indexes ?TABLE? | 显示索引的名称 |
| .limit ?LIMIT? ?VAL? | 显示或更改SQLITE_LIMIT的值 |
| .lint OPTIONS | 报告潜在的模式问题。 |
| .load FILE ?ENTRY? | 加载扩展库 |
| .log FILE|off | 打开或关闭日志记录。文件可以是stderr/stdout |
| .mode MODE ?TABLE? | 设置输出模式 |
| .nullvalue STRING | 在NULL值的位置使用字符串STRING |
| .once (-e|-x|FILE) | 仅将下一个SQL命令的输出发送到FILE |
| .open ?OPTIONS? ?FILE? | 关闭现有数据库并重新打开FILE |
| .output ?FILE? | 将输出发送到FILE,如果省略FILE,则发送到stdout |
| .parameter CMD … | 管理SQL参数绑定 |
| .print STRING… | 打印文本字符串STRING |
| .progress N | 在每个N操作码后调用进度处理程序 |
| .prompt MAIN CONTINUE | 替换标准提示符 |
| .quit | 退出此程序 |
| .read FILE | 从FILE读取输入 |
| .recover | 尝试从损坏的数据库中恢复尽可能多的数据。 |
| .restore ?DB? FILE | 从FILE还原数据库DB(默认为“main”)的内容 |
| .save FILE | 将内存中的数据库写入FILE |
| .scanstats on|off | 打开或关闭sqlite3_stmt_scanstatus()指标 |
| .schema ?PATTERN? | 显示与PATTERN匹配的CREATE语句 |
| .selftest ?OPTIONS? | 运行在SELFTEST表中定义的测试 |
| .separator COL ?ROW? | 更改列和行分隔符 |
| .session ?NAME? CMD … | 创建或控制会话 |
| .sha3sum … | 计算数据库内容的SHA3哈希值 |
| .shell CMD ARGS… | 在系统Shell中运行CMD ARGS… |
| .show | 显示各种设置的当前值 |
| .stats ?on|off? | 显示统计信息或打开/关闭统计信息 |
| .system CMD ARGS… | 在系统Shell中运行CMD ARGS… |
| .tables ?TABLE? | 列出LIKE模式为TABLE的表名 |
| .testcase NAME | 开始将输出重定向到“testcase-out.txt” |
| .testctrl CMD … | 运行各种sqlite3_test_control()操作 |
| .timeout MS | 尝试以MS毫秒为间隔打开已锁定表 |
| .timer on|off | 打开或关闭SQL计时器 |
| .trace ?OPTIONS? | 在每个SQL语句执行时输出 |
| .vfsinfo ?AUX? | 有关顶级VFS的信息 |
| .vfslist | 列出所有可用的VFS |
| .vfsname ?AUX? | 打印VFS堆栈的名称 |
| .width NUM1 NUM2 … | 设置“ column”模式的列宽度 |
SQL语句
- 以下是SQLite 3中常用的SQL语句:
- 创建表格
CREATETABLEtable_name(column_1 data_type constraints,column_2 data_type constraints,...,column_n data_type constraints);- 删除表格
DROPTABLEtable_name;- 查询数据
SELECTcolumn_1,column_2,...,column_nFROMtable_name;- 插入数据
INSERTINTOtable_name(column_1,column_2,...,column_n)VALUES(value_1,value_2,...,value_n);- 更新数据
UPDATEtable_nameSETcolumn_1=value_1,column_2=value_2,...,column_n=value_nWHEREcondition;- 删除数据
DELETEFROMtable_nameWHEREcondition;示例:
以下是使用SQLite 3创建一个名为“students”的学生信息表并插入三个学生信息的示例:
- 打开
shell命令行终端。 - 连接到您的SQLite数据库文件。
$ sqlite3 mydatabase.db备注:$表示在shell命令行的命令行提示符
出现如下界面表示sqlite3打开成功,版本不同显示信息会略有差异
QLite version3.31.12020-01-2719:55:54Enter".help"forusagehints.sqlite>- 创建一个名为“students”的学生信息表。该表将包含以下列:ID,姓名,年龄,性别和成绩。
sqlite>CREATETABLEstudents(...>ID INTERGERPRIMARYKEYNOTNULL,...>nameTEXTNOTNULL,...>ageINTEGERNOTNULL,...>genderTEXTNOTNULL,...>scoreREALNOTNULL);备注:sqlite>和...>是sqlite3的命令行提示符
此时,可以输入.table命令检查表student是否创建成功,如下所示:
sqlite>.tablestudents如果没有创建成功,或者表被删除,将会什么也不显示,例如此时执行DROP语句,将看不到表了
sqlite>DROPTABLEstudents;sqlite>.tablesqlite>重复上面的CREATE TABLE(为了放便大家复制,粘贴后面把sqlite3>,...>都省略了)
CREATETABLEstudents(ID INTERGERPRIMARYKEYNOTNULL,nameTEXTNOTNULL,ageINTEGERNOTNULL,genderTEXTNOTNULL,scoreREALNOTNULL);- 插入三个学生信息。例如:
INSERTINTOstudents(ID,name,age,gender,score)...>values(1,'张三',18,'男',90.0);INSERTINTOstudents(ID,name,age,gender,score)values(2,'子涵',18,'女',88.5);INSERTINTOstudents(ID,name,age,gender,score)values(3,'张伟',19,'男',82.5);这将向学生信息表中添加三条记录。每条记录都包含姓名、年龄、性别和分数等列的值。由于我们使用了自增长的主键列ID,因此每个记录都将在插入时自动被赋予一个唯一的ID值。
- 确认学生信息已成功插入。可以使用
SELECT语句来检索学生信息表中的所有行。例如:
select*FROMstudents;1|张三|18|男|90.02|子涵|18|女|88.53|张伟|19|男|82.5如果嫌弃这种界面,可以执行.headers on和.mode column,再执行SELECT语句,就好看了,如下图:
sqlite>.headersonsqlite>.modecolumnsqlite>select*FROMstudents;ID name age gender score---------- ---------- ---------- ---------- ----------1张三18男90.02子涵18女88.53张伟19男82.5- 退出SQLite shell或关闭终端会话
sqlite>.exit或.quit