sqlite数据库,轻量级数据库的使用

什么是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-*.zipsqlite-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语句以 ';' 作为结尾,没有';'可以随意换行)

sql 复制代码
create table users(
  id int primary key,
  name varchar(50),
  email varchar(50),
  password varchar(50)
);

这样就新建了一个表,然后插入一些数据,并查看

sql 复制代码
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的数据展示模式

sql 复制代码
.mode box

这样数据就很直观了,默认的展示格式是list,这里改成了box

同样的删除数据,更新数据,都可以使用对应的sql语句,这里就不赘述了,

sql 复制代码
.exit 退出sqlite
.help 查看sqlite所有命令

sqlite的常用命令

sql 复制代码
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数据

sql 复制代码
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表

sql 复制代码
create table users(
  id int primary key,
  name varchar(50),
  email varchar(50),
  password varchar(50)
);

deleteTable.sql: 删除users表

sql 复制代码
drop table users

insertValues.sql: 插入数据到users表

sql 复制代码
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表中的数据

sql 复制代码
select * from users;

然后来执行这些脚本:

sql 复制代码
sqlite3 sqlite.db
.database
.read ./sql/selectTable.sql

注意:执行sql脚本要使用文件位置,而不是文件名称

其他的sql脚本可以自行尝试

使用.read命令可以像使用函数一样取操作sqlite数据库,这样可以减少再命令行重复敲大量的代码

使用nodejs操作sqlite数据库

除了命令行使用sqlite数据库,同样的可以用编程语言来使用sqlite数据库,这里展示js使用sqlite的用法,

首先需要安装sqlite3这个包

sql 复制代码
npm install sqlite3

然后新建一个sqlite.js文件

javascript 复制代码
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数据库中的信息

相关推荐
Renhongzhou1 分钟前
企业级NoSql数据库Redis集群
运维·数据库·redis·nosql·哨兵·集群扩容
陈丹阳(滁州学院)1 小时前
mysql数据库数据的批量插入
数据库·mysql·navicat
那年夏天丶1 小时前
Mysql剖析(四)----Mysql的行锁、表锁、间隙锁详解
数据库·mysql
铁匠匠匠1 小时前
django学习入门系列之第十点《初识 django》
经验分享·后端·python·学习·mysql·django·sqlite
假面悍匪王小明1 小时前
Clickhouse集群化(五)clickhouse语法学习
数据库·sql·mysql
安科瑞蒋静1 小时前
AcrelEMS3.0企业微电网智慧能源平台的设计与应用-安科瑞 蒋静
数据库·人工智能·php
一眼万年的星空2 小时前
程序员金九银十面试宝典(持续更新中................)
java·数据库·程序人生·项目管理·springboot·c c++·ios高级篇
单车~2 小时前
华为云 GaussDB 数据库和 MySQL 数据库的区别
数据库·华为云·gaussdb
htx nb2 小时前
linux:网络编程之TCP
linux·c语言·网络·数据库·tcp/ip
best keyl3 小时前
mysql的半同步模式
数据库·mysql