是什么
SQLite是一个数据库,与常用mysql相比,sqlite是进程内的数据库,无需配置、无需服务器。
为什么要用
与mysql相比,sqlite有几个比较好的特点:
不需要单独部署,跟着程序启动初始化即可使用;
不需要配置,即不需要安装和管理;
单一文件存储在磁盘;
非常小,据说<=400KB;
支持多进程或线程安全访问,支持事务,完全兼容ACID;
等等。
之所以用它,对我来说,主要取决于前两点优势。
怎么用
以springboot+mybatis-plus+sqlite为例
项目结构:
建表语句:
-- ------------------ Table structure for user-- ---------
DROP TABLE IF EXISTS `user`;CREATE TABLE `user`( `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` CHAR(100) NOT NULL, `sex` tinyint(2) DEFAULT NULL, `address` VARCHAR(200) DEFAULT NULL);
测试数据:
------------------------------ Records of user-- ------------------------
INSERT INTO `user` (`id`, `name`, `sex`, `address`) VALUES (1, '姓名1', 1, '测试地址1');INSERT INTO `user` (`id`, `name`, `sex`, `address`) VALUES (2, '姓名2', 2, '测试地址2');INSERT INTO `user` (`id`, `name`, `sex`, `address`) VALUES (3, '姓名3', 1, '测试地址3');
application.yml
server:
port: 80
spring:
datasource:
url: jdbc:sqlite:src/main/resources/db/user.db
driver-class-name: org.sqlite.JDBC
# username: 选用 sqlite 数据库不需要配置此项
# password: 选用 sqlite 数据库不需要配置此项
# DDL建表语句
schema: classpath:db/schema.sql
# DML添加数据
data: classpath:db/data.sql
initialization-mode: always
continue-on-error: true
mybatis-plus:
mapper-locations: classpath:mapper/*Mapper.xml
type-aliases-package: com.example.sqlite.model
启动测试:
结构:{"id":1,"name":"姓名1","sex":1,"address":"测试地址1"}
闭坑:
配置数据库文件(user.db),分三种情况:
相对路径两种
放在resources文件夹下,spring.datasource.url=jdbc:sqlite::resource:db/user.db,据说只适合只读场景,不推荐使用。实测初始化语句确实不会执行。
jdbc:sqlite:src/main/resources/db/user.db,相对根路径(src同级),可正常使用
绝对路径一种
D:\IdeaProjects\springboot-sqlite\src\main\resources\db\user.db,绝对路径,可正常使用
与mysql几点区别:
建表
不支持comment注释
不支持charset
不支持collate
不支持索引(建表时不支持,支持DDL创建索引)
TIMESTAMP支持DEFAULT CURRENT_TIMESTAMP,不支持ON UPDATE CURRENT_TIMESTAMP
支持主键自增,关键字不同(mysql:AUTO_INCREMENT ,sqlite:AUTOINCREMENT),且只能使用在 INTEGER类型的PRIMARY KEY上
常用命令:
创建数据库:
sqlite3 db_test.db
查看数据路径
.databases
创建数据表:
create table employee (empid int ,deptid int ,salary decimal(10,2));
查看表
.tables
查看建表语句
.schema table_name
默认编码:utf8
查看当前编码:pragma encoding
修改编码:pragma encoding = UTF8/UTF16
插入数据:
insert into employee values(1,10,5500.00);
查看索引
列出表上所有可用的索引.indices 或 .indexes table_name
退出编辑器
.quit
参考文档:
https://m.runoob.com/sqlite/sqlite-intro.html