news 2026/4/18 10:23:38

SQLite3及SQL语句

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQLite3及SQL语句

关于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语句:
  1. 创建表格
CREATETABLEtable_name(column_1 data_type constraints,column_2 data_type constraints,...,column_n data_type constraints);
  1. 删除表格
DROPTABLEtable_name;
  1. 查询数据
SELECTcolumn_1,column_2,...,column_nFROMtable_name;
  1. 插入数据
INSERTINTOtable_name(column_1,column_2,...,column_n)VALUES(value_1,value_2,...,value_n);
  1. 更新数据
UPDATEtable_nameSETcolumn_1=value_1,column_2=value_2,...,column_n=value_nWHEREcondition;
  1. 删除数据
DELETEFROMtable_nameWHEREcondition;

示例:

以下是使用SQLite 3创建一个名为“students”的学生信息表并插入三个学生信息的示例:

  1. 打开shell命令行终端。
  2. 连接到您的SQLite数据库文件。
$ sqlite3 mydatabase.db

备注:$表示在shell命令行的命令行提示符
出现如下界面表示sqlite3打开成功,版本不同显示信息会略有差异

QLite version3.31.12020-01-2719:55:54Enter".help"forusagehints.sqlite>
  1. 创建一个名为“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);
  1. 插入三个学生信息。例如:
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值。

  1. 确认学生信息已成功插入。可以使用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张三1890.02子涵1888.53张伟1982.5
  1. 退出SQLite shell或关闭终端会话
sqlite>.exit

.quit

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:51:05

计算机专业到底怎么学?核心就俩字:动手实践!

计算机专业到底怎么学?核心就俩字:动手实践!计算机专业真的不是靠背知识点、看网课、记笔记就能学好的,纯理论学习到最后只会变成 “纸上谈兵”—— 面试写不出一行完整代码,给个需求连项目框架都搭不起来,…

作者头像 李华
网站建设 2026/4/18 6:55:13

Astro快速食用指南:从零到打造你的静态博客

轻量、极速、现代的静态网站生成框架。 一文带你从安装到实战,彻底掌握 Astro。 Astro 是什么? Astro 是一个现代的前端框架,用来构建静态网站和内容驱动的项目(如博客、文档站、作品集等)。它最大的特点是&#xff1…

作者头像 李华
网站建设 2026/4/18 8:03:10

散点图线性拟合全解析:从原理到实战优化指南

散点图线性拟合全解析:从原理到实战优化指南 引言 在数据分析和机器学习领域,散点图线性拟合是揭示变量间关系最直观、最经典的方法之一。无论是探索趋势、预测未来,还是校准仪器,一条简单的直线背后蕴含着深刻的统计思想与工程…

作者头像 李华
网站建设 2026/4/17 13:40:31

5 款 AI 写论文哪个好?盲测后:虎贲等考 AI 凭 “真材实料” 稳坐 C 位

“用 ChatGPT 写的论文被查出假文献”“WPS AI 生成的实证章节只有文字没图表”“试了 5 款工具,只有它能产出带真实数据的完整论文”—— 毕业季选 AI 写论文软件,最忌 “金玉其外”:表面生成速度快,实则文献虚假、数据空洞、逻辑…

作者头像 李华
网站建设 2026/4/18 3:36:20

基于微信小程序的私房菜定制上门服务系统设计实现

背景分析 随着生活节奏加快,家庭聚餐或个性化饮食需求增长,传统餐饮服务难以满足灵活、私密的用餐场景。微信小程序凭借高普及率、即用即走的特性,成为连接私房菜厨师与消费者的理想平台。 市场需求 个性化餐饮需求:消费者对健…

作者头像 李华