什么是sqlite数据库
sqlite是具有零配置、无服务的特点,遵循 ACID 规则,是一款备受欢迎的轻量级数据库。
tips:ACID 规则即,A(原子性)、C(一致性)、I(独立性)、D(持久性)
sqlite常被用于pc端,移动端的操作系统中,同时一些单机的游戏,也会使用sqlite存放数据在本地
相比于mysql数据库,sqlite简单,轻量,无需对它进行任何配置(无需设置账户密码,导入即连接),它仅作为一个数据存放的容器,sqlite中存放的数据(一个数据库)被放在一个 xxx.db 的文件中,在使用sqlite时,只需要导入这个db文件即可,
sqlite是一个纯粹的存储容器,它的数据被存放在文件中,每个sqlite数据库都是一个xxx.db文件,这表示,这个数据可以随意传输,另存保留
sqlite完全兼容sql语法,可以使用任意的sql语句在操作数据库,
安装sqlite
sqlite的官网下载地址: SQLite Download Page
到sqlite的官网下载两个压缩包:sqlite-tools-win32-*.zip 和 sqlite-dll-win32-*.zip 压缩文件
下载完成后将文件解压到新建的sqlite文件夹下,解压后会获得几个主要文件
这个sqlite3.exe就是sqlite数据库的核心文件,可以点开在命令行查看
此时就成功启动了sqlite,但是这里显示没有找到数据库文件,无法连接到数据库,这是因为命令不完整,接下来设置一下环境变量,全局启用sqlite
环境变量(右击此电脑--->属性--->高级系统设置--->环境变量--->path),设置环境变量是学习编程一定要掌握点
关键在最后一步,把sqlite3.exe所在文件夹的位置 添加到环境变量中,
设置完成后打开cmd命令行输入命令
sqlite3
此时出现了和sqlite3.exe一样的效果,说明环境变量配置成功,
sqlite的使用
下面开始使用sqlite
新建数据库
首先进入一个文件夹中,输入cmd回车进入命令行
然后输入以下命令
sqlite3 xxx.db 打开xxx.db,执行sqlite程序
.database 查看数据库
这个命令会在当前文件夹下打开一个xxx.db文件(如果文件不存在则新建)
此时没有参数警告信息了,可以查看文件夹中,多出了一个sqlite.db文件(不用管另外哪个js文件,这里没有影响),这就是新建的数据库,r/w表示开启读写权限
使用sql语句
接下来使用sql新建表(sql语句以 ';' 作为结尾,没有';'可以随意换行)
create table users(
id int primary key,
name varchar(50),
email varchar(50),
password varchar(50)
);
这样就新建了一个表,然后插入一些数据,并查看
insert into users(id,name,email,password) values(1,'admin','admin@gmail.com','admin123');
insert into users(id,name,email,password) values(2,'user','user@gmail.com','user123');
select * from users;
但是这样开启了不太直观,可以改变sqlite的数据展示模式
.mode box
这样数据就很直观了,默认的展示格式是list,这里改成了box
同样的删除数据,更新数据,都可以使用对应的sql语句,这里就不赘述了,
.exit 退出sqlite
.help 查看sqlite所有命令
sqlite的常用命令
sqlite:
命令行打开sqlite命令:sqlite3 文件位置<xxx.db>
查看数据库:.database
设置表的展示格式: .mode (list<默认>, column, insert<展示插入语句>, line, tab<无线表格>, table<有线表格> , tcl<字符形式> , box<盒子形式> , json)
设置显示行数:.headers on/off
查看表:.table
查看表结构:.schema
导出到文件: .output 文件位置 <使用json展示格式,导出成json文件--->.output xxx.json .mode json sql查询语句 注意:此命令会创建一个空的文件,若文件存在则会被置空 >
执行sql脚本:.read 文件位置 <xxx.sql>
### sql语句以';'结束
查看表内容:select * from 表名
删除表:drop table 表名
删除表内容:delete from 表名
插入数据:insert into 表名 values (值1,值2,...)
更新数据:update 表名 set 列名=新值 where 条件
查询数据:select * from 表名 where 条件
删除数据:delete from 表名 where 条件
.output和.read
这里重点展示.output和.read 的用法
导出json数据
sqlite3 sqlite.db
.database
.output data.json
.mode json
select * from users;
这里将users表中的数据以json的格式导出到data.json中了,
注意: 要导出json需要将数据展示调成json (.mode json),然后再使用sql语句查看数据,这样就将数据写入到了json文件中
执行sql脚本
首先新建sql文件夹,里面准备几个xxx.sql文件,内部包含sql语句
createTable.sql: 新建一个users表
create table users(
id int primary key,
name varchar(50),
email varchar(50),
password varchar(50)
);
deleteTable.sql: 删除users表
drop table users
insertValues.sql: 插入数据到users表
insert into users(id,name,email,password) values(1,'admin','admin@gmail.com','admin123');
insert into users(id,name,email,password) values(2,'user','user@gmail.com','user123');
selectTable.sql: 查看users表中的数据
select * from users;
然后来执行这些脚本:
sqlite3 sqlite.db
.database
.read ./sql/selectTable.sql
注意:执行sql脚本要使用文件位置,而不是文件名称
其他的sql脚本可以自行尝试
使用.read命令可以像使用函数一样取操作sqlite数据库,这样可以减少再命令行重复敲大量的代码
使用nodejs操作sqlite数据库
除了命令行使用sqlite数据库,同样的可以用编程语言来使用sqlite数据库,这里展示js使用sqlite的用法,
首先需要安装sqlite3这个包
npm install sqlite3
然后新建一个sqlite.js文件
const sqlite = require('sqlite3').verbose();
// 引入 sqlite3 模块后,执行了 verbose 函数。 verbose 函数用于将执行模式设置为输出调用堆栈,
// 也就是说,如果代码出错, 将会定位到具体的代码执行函数,而不仅仅只是提示错误信息,方便我们调试代码
// console.log(sqlite);
const db = new sqlite.Database('./sqlite.db',sqlite.OPEN_READWRITE,(err)=>{// sqlite.OPEN_READWRITE开启读写权限
if(err){
console.log(err);
return;
}
console.log('数据库连接成功!');
} ); // 创建一个数据库连接
console.log(db);
// serialize 方法,顾名思义,指定操作串行执行(确保这些异步操作按书写顺序执行),接受一个回调函数,内部执行run方法
// run方法,执行sql语句,接受3个参数,第一个参数是sql语句,第二个参数是一个数组,用于替换sql语句中的占位符(?),第三个参数是一个回调函数,用于处理执行结果
// all方法,执行sql语句,接受3个参数,第一个参数是sql语句,第二个参数是一个数组,用于替换sql语句中的占位符(?),第三个参数是一个回调函数,用于处理执行结果
// all方法与run方法的区别在于,all的回调多了一个参数rows,用于返回查询结果,所以查询结果使用all方法
// exec方法, 执行多条sql语句,接受2个参数, 第一个参数是sql语句,第二个参数是一个回调函数,用于处理执行结果
// exec方法,与run方法的区别在于,exec可以执行多条sql语句(用';'隔开),而run只能执行一条sql语句,并且没有占位符,不能修改sql
db.serialize(()=>{
db.run("insert into users(id,name,email,password) values(?,'my','my@gmail.com','123');",[4],(err)=>{
if(err){
console.log(err);
return;
}
})
db.all('select * from users;',[],(err,rows)=>{
if(err){
console.log(err);
return;
}
console.log(rows);
})
})
db.close(); // 关闭数据库连接
执行这个sqlite.js文件,node sqlite.js
这样就成功读取到了sqlite数据库中的信息