一、SQLite3数据库概述

SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这就体现出来SQLite与其他数据库的最大的区别:SQLite不需要在系统中配置,直接可以使用。且SQLite不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite可直接访问其存储文件。
相对于其它数据库,SQLite具有以下优势:
1.不需要配置,不需要安装和管理
2.不需要一个单独的服务器进程或操作的系统(无服务器的)
3.一个完整的SQLite数据库存储在一个单一的跨平台的磁盘文件上
4.非常小,轻量级的数据库,完全配置时小于400KiB,省略可选功能配置时小于250KiB
5.自给自足,不需要任何外部的依赖
6.完全兼容ACID,允许从多个进程或线程安全访问
7.支持SQL92(SQL2)标准的大多数查询语言的功能
8.使用ANSI-C编写的,并提供了简单和易于使用的API
9.可在UINX(Linux,Max OS-X,Android,iOS)和Windows(Win32,WinCE,WinRT)中运行

本文进行操作示例时使用的表格样例如下:
数据库名:class
表格名:student

idnamesexagescore
2301zongruimale1589
2302tingyufemale1587
2303mikufemale1692
2304liqiangmale1795
2305hailiangmale1681
2306jiademale1477
2307tianyumale1785

Ubuntu版本:22.04.2
Linux内核版本:6.2.0-32

二、安装SQLite3

2.1 网络安装

step1:安装数据库系统Sqlite3操作软件命令:

sudo apt-get install sqlite3

step2:安装Sqlite3数据库开发支持库:

sudo apt-get install libsqlite3-dev

step3:安装Sqlite3图形化管理界面DB Browser for SQLite(用户可选择性安装):

sudo apt-get install sqlitebrowser

step4:检查是否安装成功,如果成功,输入以下命令可显示SQLite3版本信息。

sqlite3 --version

2.2 手动安装

step1:从SQLite官网上下载源码压缩包(笔者本人下载的是sqlite-autoconf-3430100.tar.gz)SQLite官网入口->。

step2:将源码压缩包拷贝到Linux指定文件夹下。
step3:使用下面的命令解压,解压后生成一个名为sqlite-autoconf-3430100的文件夹。

tar -zxvf sqlite-autoconf-3430100.tar.gz

step4:进入解压后的sqlite-autoconf-3430100文件夹查看文件目录,发现没有makefile文件,但是有configure这个文件

cd sqlite-autoconf-3430100ls

step5:执行以下命令,将其安装到你想要的指定路径下,笔者是安装在libo文件夹下的名为sqlite3的文件夹,安装时如果路径中没有该文件夹,在安装后会自动创建一个文件夹。

./configure --prefix=/home/qinglan/libo/sqlite3

注意:这里输入的路径是绝对路径

备注: 源码的安装一般由3个步骤组成: 配置 (configure)、编译 (make) 、安装(make install)
执行以下指令
/configure –prefix=/home/qinglan/libo/sqlite3
make
make install
后将自动生成目录sqlite3,且该软件所有的文件都被复制到这个目录。
使用–prefix的优点: 维护方便、卸载软件或移植软件方便。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净,移植软件只需拷贝整个目录到另外一个机器即可(前提是相同的操作系统)。
如果不指定prefix,可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share。要卸载这个程序,要么在原来的make目录下用一次make uninstall (前提是make文件指定过uninstall) ,要么去上述目录里面把相关的文件一个个手工删掉,相对来说没有那么方便。

step6:执行make和make install,执行此过程需要花点时间。

makemake install

step7:检查是否安装成功,如果成功,输入以下命令可显示SQLite3版本信息(同网络安装)。

sqlite3 --version

三、卸载SQLite3

3.1 Linux命令行卸载

step1:输入以下命令,查看已安装的SQLite3软件包列表,这样一会儿可以查看是否真的卸载。

dpkg --list sqlite3


step2:在终端中输入以下命令,卸载程序和所有配置文件(需要输入密码)。

sudo apt-get --purge remove sqlite3

如果只想卸载程序但保留配置文件,请输入以下命令:

sudo apt-get remove sqlite3

step3:再次输入step1中的命令,查看是否卸载。

3.2 进入sqlite文件夹卸载

step1:进入解压后的sqlite目录下,和手动安装过程一样。
step2:执行./configure,再执行make(若make失败,就删除目录中的sqlite3文件)
step3:执行make uninstall,即可成功卸载。

四、SQLite3常用命令

输入命令行sqlite3,则进入数据库编辑模式

所有命令都是在 sqlite> 后输入
系统命令以 “.“开头,普通命令以”;”结束。

注意:SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中就有不同的含义。

4.1 常用系统命令

.schema student --查看名字为student的表的结构.quit或.exit或.q --退出数据库.help --查看帮助信息.database或.databases --查看数据库.tables或.ta--显示数据库中所有的表的表名.output --查询的结果输出到文件,如:.output student.txt.show --显示各种设置的当前值.head on--查询时显示列名称

4.2 常用普通命令

4.2.1 创建或打开一个数据库

sqlite3 class.db(或sqlite3 class)

创建一个名字为sql1的数据库,如已经存在,则是打开这个名为sql1数据库.

注意:此命令直接在shell中输入,不要在sqlite3环境中输入。

4.2.2 创建一张新表

create table student (id int, name char, sex char, age int, score int);

括号内的id、name、sex、age、score都是字段名称,字段名称后跟着的int、char是字段类型,每个字段用逗号隔开。

4.2.3 向表中插入一条完整记录

insert into student values(2301, 'zongrui', 'male', 15, 89);

或者

insert into student(id, name, sex, age, score) values(2301, 'zongrui', 'male', 15, 89);

括号内的『2301, ‘zongrui’, ‘male’, 15, 89』字符串需要用单引号或双引号括起来。若没有返回错误信息,则表示插入成功。

4.2.4 一次性插入多个记录

insert into student values(2302, 'tingyu', 'female', 15, 87),(2303, 'miku', 'female', 16, 92),(2304, 'liqiang', 'male', 17, 95);

各个记录之间要用逗号隔开。

4.2.5 查看非格式化数据表的全部内容

select * from student; 

4.2.6 查看格式化数据表的全部内容

.header on --设置显示表头(即显示每列的字段名) .mode column --设置以列的形式展示结果select * from student; 


另外,可以用如下命令改变列的宽度

.width 10 30 20 -- 设置第一列的宽度为 10,第二列的宽度为 30,第三列的宽度为 20

每一列的宽度数中间用空格隔开。

备注:有的教程中在每一列的宽度数中间加了逗号(.width 10,30,20 ),笔者本人也亲自做了尝试,加逗号之后除第一列之外,其余列的宽度均未发生改变。

4.2.7 查看数据表中部分字段(列)记录

select id from student; --查看id一列的记录select id,name from student;--查看id和name两列的记录

4.2.8 查看数据表中数据记录的数量

select count(*) from student;--查看表中总共有多少名同学的信息

4.2.9 查看数据表的结构

pragma table_info(student);

此命令将显示数据表的列名、数据类型和约束等信息。

4.2.10 按字段排序

select * from student order by age DESC; --按照年龄降序排列

DESC为降序,AEC为升序

4.2.11 按照某个条件筛选记录

select * from student where age = 16;--筛选年龄等于16岁的记录(此处等号既可用“=”也可用“==”)select * from student where age != 16; --筛选年龄不等于16岁的记录(此处不等于号既可用“!=”也可用“”)select * from student where age < 15 and sex = 'male'; --筛选年龄小于15岁并且性别为男性的记录select * from student where age = 14 or age = 15 or age = 16;--筛选年龄为14岁、15岁或者16岁的记录select * from student where age between 14 and 16; --筛选年龄在14岁~16岁的记录select * from student where age in (14, 15, 16); --筛选年龄为14岁、15岁或者16岁的记录select * from student where age not in (15, 16); --筛选年龄不是15岁和16岁的记录

4.2.12 更新记录

update student set name = "chuyin" where id = 2303; --把学号为2303的名字改为“chuyin”update student set name = "miku", score = 93 where id = 2303; --把学号为2303的名字改为“miku”,分数改为93

4.2.13 从数据表中提取指定行

select * from student limit 3; --从头开始提取3个记录select * from student limit 3 offset 2;--从第三位开始提取3个记录

4.2.14 数据表中添加新字段(列)

alter table student add column address char; --将数据表中添加『地址(address)』字段

4.2.15 向数据表中一列添加相同数据

update student set address='beijing'; --将表中地址字段全部设置为『beijing』

4.2.16 重新命名表

alter table student rename to student_new;--将表名student改为student_new

4.2.17 把原来的表里面的需要的列复制到一个新表

create table student as select id,name,sex,age,score from student_new;--把student_new数据表中的学号、姓名、性别、年龄、分数一栏复制到新建数据表student中

4.2.18 删除记录

delete from student where id=2305;--删除学号为2305的记录

4.2.19 删除整个数据表

drop table student;

4.2.20 删除一列数据

SQLite3不支持直接删除一列数据,可通过4.2.17的方式新建一个表,再把除要删除之外的其它列复制到新表中,然后采用4.2.19的方式删除旧数据表,最后采用4.2.16的方式将新数据表重命名为原来的名字,也能达到删除一列数据的效果。

写在最后

以上只是笔者本人列出的关于SQLite的比较常用的命令,属于入门级别,SQLite数据库虽小,但功能是很强大的,还有很多的功能亟待我们解锁。
整理过程中参考了一些其它老师的书或文章,在此表示感谢!如果本文有任何错误之处,还望指出!非常感谢!


参考书籍及文章

[1] [美]Grant Allen,Mike Ovens《SQLite权威指南》(第二版),杨谦 刘义宣 谢志强译,电子工业出版社;
[2] SQLite数据库 简介、特点、优势、局限性及使用 网页链接
[3] 百度百科;
[4] linux下sqlite安装及基本使用 网页链接
[5] 菜鸟教程 SQLite教程;
[6] ./configure –prefix 命令用法 网页链接
[7] Linux下Sqlite3数据库操作 网页链接