安装 sqlite3
在 arch 源里,mysql 被替换成了 mariadb,没力气折腾了,也不想污染 manjaro 的环境,所以在 windows 上装了 mysql 来远程连接,但是远程连接的速度慢的感人,因为要做管理信息系统的实践课作业,我既不想拿两台电脑去,也不想在 manjaro 上装一个偏大的数据库来耗电,最后我觉得应该试一下是最轻量的 sqlite3
one line
$ sudo pacman -S sqlite3
使用 sqlite3
和其他关系型数据库不同的是,SQLite没有单独的服务器进程,以供客户端程序访问并提供相关的服务。SQLite作为一种嵌入式数据库,其运行环境与主程序位于同一进程空间,因此它们之间的通信完全是进程内通信,而相比于进程间通信,其效率更高。然而需要特别指出的是,该种结构在实际运行时确实存在保护性较差的问题,比如此时,应用程序出现问题导致进程崩溃,由于SQLite与其所依赖的进程位于同一进程空间,那么此时SQLite也将随之退出。但是对于独立的服务器进程,则不会有此问题,它们将在密闭性更好的环境下完成它们的工作。
安装完之后,在命令行直接输入 sqlite3
就能进入 sqlite 的界面了,sqlite3 的命令都是用 .
开头,详见 .help
,下文并不会对命令做详细介绍,我认为没必要去记住,用的时候查一下表就行了,只要掌握几个常用的指令就行
创建数据库
在进入 sqlite 界面前可以指定一个数据库文件,如果这个文件不存在的话,进入界面之后输入 .database
会保存到本地,之后使用 .quit
退出 sqlite 界面查看
$ sqlite3 test1.db
SQLite version 3.40.0 2022-11-16 12:10:08
Enter ".help" for usage hints.
sqlite> .database
main: /home/paradox/workspace/go/src/trysqlite3/test1.db r/w
sqlite> .quit
$ ls
test1.db
也可以在进入 sqlite 后,用 .open
进行等价的操作,但这时候不需要 .database
就能保存到本地
$ sqlite3
SQLite version 3.40.0 2022-11-16 12:10:08
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open test.db
sqlite> .quit
$ ls
test.db
gorm 连接
🔗 gorm 的官方文档有演示,由于 sqlite 是基于文件的,所以就不需要一堆复杂的连接参数
package main
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
}
测试建表
这里使用 gorm 的 AutoMigrate
方法
type File struct {
Id int
Filename string
CreateDate time.Time
}
func main() {
db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Cofing{})
db.AutoMigrate(&File{})
}
.table
查看数据库中的所有表,.schema
查看指定表的字段
$ sqlite3 test.db
SQLite version 3.40.0 2022-11-16 12:10:08
Enter ".help" for usage hints.
sqlite> .tables
files
sqlite> .schema files
CREATE TABLE `files` (`id` integer,`filename` text,`create_date` datetime,PRIMARY KEY (`id`));
没问题,那 gorm 的其他方法应该都能用了
最后来测试一下增就结束吧
db.Create(&File{Filename: "nice", CreateData: time.Now()})
数据库当然支持 sql 语句,我们来查看表
sqlite> select * from files;
1|nice|2023-01-28 21:14:31.440692473+08:00|
其中 id 是自增主键,所以能自加,可以看到非常完美,我相信 sqlite 一定非常好用
之后可能会遇到坑,做好心理准备
2023/01/28貌似后台要开一个
sqlite3 test.db
才能响应,不然 orm 会阻塞说实话,懒人的 orm 让我有点不舒服,下学期还是要系统性学习一下 sql 语句啊,一方面为了灵活,另一方面面试肯定还要用啊 …