2024年Go最全SQLite 数据库入门教程(GO)_sqlite学习,2024年最新Golang常见面试题知乎

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

C:\Users\lenovo>sqlite3 C:\Users\lenovo\Desktop\test.db // 创建数据库
sqlite> .databases // 显示数据库信息
sqlite> .quit // 退出sqlite3的shell程序环境
sqlite> .open test.db // 创建数据库

在这里插入图片描述

新手注意,这里有一个坑,是在cmd(在命令行)中输入,而不是打开sqlite3后在shell中输入。输入 .databases 就会显示刚创建的数据库信息(能看到创建的数据库文件及地址路径信息);输入.quit 就会退出sqlite3的shell程序环境。进入SQLite后,输入 .open 数据库名.db 方式,也可以创建数据库,如果数据库文件已经建立,则打开。这种方式不支持自定义路径。

  • 创建表:CREATE TABLE database_name.table_name(column1 datatype PRIMARY KEY(one or more columns),column2 datatype,…);
sqlite> CREATE TABLE express_orders (id INTEGER PRIMARY KEY NOT NULL,uid INTEGER NOT NULL,weight DOUBLE NOT NULL,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP); // 创建表
sqlite> .schema // 查看所有表结构
sqlite> .tables // 查看所有表

在这里插入图片描述

  • 插入数据(insert):
    INSERT INTO TABLE_NAME (column1, column2, column3,…columnN) VALUES (value1, value2, value3,…valueN);
    INSERT INTO TABLE_NAME VALUES (value1,value2,value3,…valueN);
sqlite> INSERT INTO express_orders (uid,weight) VALUES (1685040228039,0.9);
sqlite> INSERT INTO express_orders (uid,weight) VALUES (1685040500698,67.9942); 
sqlite> INSERT INTO express_orders (uid,weight) VALUES (1685040524994,99.99);
sqlite> INSERT INTO express_orders (uid,weight) VALUES (1685040559781,100);

在这里插入图片描述

  • 查询数据(select):
    SELECT * FROM table_name;(查询所有字段)
    SELECT column1, column2, columnN FROM table_name;(查询指定字段)
    SELECT * FROM table_name where column1 = 指定信息;(在限制条件下查询指定信息)
sqlite> SELECT \* FROM express_orders;
sqlite> SELECT uid,weight FROM express_orders;
sqlite> SELECT \* FROM express_orders where id > 1;
sqlite> .header on // 开启头部显示
sqlite> .mode column // 设置输出模式,左对齐的列
sqlite> SELECT \* FROM express_orders;
sqlite> .timer on // 开启 CPU 定时器
sqlite> SELECT \* FROM express_orders;

在这里插入图片描述
在这里插入图片描述

  • 创建索引(Index):CREATE INDEX index_name ON table_name (column_name);
sqlite> CREATE INDEX index_uid ON express_orders (uid); // 创建索引
sqlite> .schema // 查看所有表结构

在这里插入图片描述

3、SQLite 可视化管理工具

SQLiteStudio是一个开源、跨平台的 SQLite 可视化管理工具。免费,多语言界面,支持 Linux,Mac 和 Windows。官方网址SQLiteStudio

在这里插入图片描述
在这里插入图片描述

五、Go 语言使用 SQLite 数据库

1、安装 go-sqlite3

在安装go-sqlite3之前,需要先安装SQLite数据库,在Golang中通过 go get 命令安装 go-sqlite3:

go get github.com/mattn/go-sqlite3

2、安装 mingw64

在实践中我们发现,只安装 go-sqlite3 是不可以的,无法和数据库建立连接,会报以下错误:

# github.com/mattn/go-sqlite3
cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%

报错意思是缺少 gcc 环境,我们需要装一个 gcc 环境。因为 go里面使用sqlite,实际上是要下载sqlite的源代码编译的,当然,使用的时候不用手动编译,在linux中,gcc 如果已经安装了,是不用担心的,但是在windows中,为了支持编译,必须使用 mingw64。下载后缀为 posix-seh 的,mingw64下载地址

在这里插入图片描述

解压下载好的文件放置任一目录,随后将 bin 目录添加进 path 环境变量中,打开 cmd ,输入 gcc -v ,如正确显示版本号则安装成功,然后重启 goland 即可。

如果你发现在 cmd 中已经能够找到 gcc 命令,但是goland 中执行程序还是找不到的话,那么多半就是 goland 的环境变量还未刷新,重启电脑、或者清空goland全部缓存并重启,即可解决。

在这里插入图片描述

3、连接数据库
package main

import (
	"database/sql"
	"fmt"
	// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。
	\_ "github.com/mattn/go-sqlite3"
	"log"
)

var db \*sql.DB
var err error

func main() {
	// Open() 函数指定驱动名称和数据源名称
	db, err = sql.Open("sqlite3", "data.db")
	if err != nil {
		fmt.Printf("Database creation failed: %v\n", err)
		return
	}
	// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询
	defer db.Close()

	var version string
	// QueryRow() 执行查询,返回版本号
	err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version)
	if err != nil {
		fmt.Printf("Database creation failed: %v\n", err)
		return
	}
	// 连接成功,打印出"database connected:版本号"
	fmt.Printf("Database creation successful: %v\n", version)
}

在这里插入图片描述

4、创建数据表
package main

import (
	"database/sql"
	"fmt"
	// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。
	\_ "github.com/mattn/go-sqlite3"
)

func main() {
	// Open() 函数指定驱动名称和数据源名称
	db, err = sql.Open("sqlite3", "data.db")
	if err != nil {
		fmt.Printf("Database creation failed: %v\n", err)
		return
	}
	// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询
	defer db.Close()

	connectDB()
	createTable()
}

var db \*sql.DB
var err error

// 连接数据库
func connectDB() {
	var version string
	// QueryRow() 执行查询,返回版本号
	err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version)
	if err != nil {
		fmt.Printf("Database creation failed: %v\n", err)
		return
	}
	// 连接成功,打印出"database connected:版本号"
	fmt.Printf("Database creation successful: %v\n", version)
}

// 创建数据库表
func createTable() {
	// 建表语句
	sts := `
 CREATE TABLE express\_orders (
 id INTEGER PRIMARY KEY NOT NULL,
 uid INTEGER NOT NULL,
 weight DOUBLE NOT NULL,
 created\_at DATETIME NOT NULL DEFAULT CURRENT\_TIMESTAMP
 );`

	// 使用db.Exec() 函数来执行 SQL 语句
	\_, err = db.Exec(sts)
	if err != nil {
		fmt.Printf("Failed to create database table: %v\n", err)
		return
	}
	fmt.Printf("Successfully created database table! \n")
}

在这里插入图片描述

5、插入数据
package main

import (
	"database/sql"
	"fmt"
	// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。
	\_ "github.com/mattn/go-sqlite3"
)

func main() {
	// Open() 函数指定驱动名称和数据源名称
	db, err = sql.Open("sqlite3", "data.db")
	if err != nil {
		fmt.Printf("Database creation failed: %v\n", err)
		return
	}
	// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询
	defer db.Close()

	connectDB()
	insert(1, 0.81192)
}

var db \*sql.DB
var err error

// 连接数据库
func connectDB() {
	var version string
	// QueryRow() 执行查询,返回版本号
	err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version)
	if err != nil {
		fmt.Printf("Database creation failed: %v\n", err)
		return
	}
	// 连接成功,打印出"database connected:版本号"
	fmt.Printf("Database creation successful: %v\n", version)
}

// 插入数据
func insert(uid int, weight float64) {
	// 插入语句
	res, err := db.Exec("INSERT INTO express\_orders(uid, weight) VALUES(?,?)", uid, weight)
	if err != nil {
		fmt.Printf("Insert data failed: %v\n", err)
		return
	}

	// 获取自增ID
	lastInsertId, \_ := res.LastInsertId()
	fmt.Printf("Successfully inserted data, lastInsertId = %v\n", lastInsertId)
}

在这里插入图片描述

6、查询数据
package main

import (
	"database/sql"
	"fmt"
	// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。
	\_ "github.com/mattn/go-sqlite3"
)

func main() {
	// Open() 函数指定驱动名称和数据源名称
	db, err = sql.Open("sqlite3", "data.db")
	if err != nil {
		fmt.Printf("Database creation failed: %v\n", err)
		return
	}
	// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询
	defer db.Close()

	connectDB()
	ret := query(1)
	fmt.Println(ret)
}

var db \*sql.DB
var err error

// 连接数据库
func connectDB() {
	var version string
	// QueryRow() 执行查询,返回版本号
	err = db.QueryRow("SELECT SQLITE\_VERSION()").Scan(&version)
	if err != nil {
		fmt.Printf("Database creation failed: %v\n", err)
		return
	}
	// 连接成功,打印出"database connected:版本号"
	fmt.Printf("Database creation successful: %v\n", version)
}

// 查询数据
func query(uid int) (weightList []float64) {
	// 结果重量集合
	weightList = make([]float64, 0)

	// 查询语句
	rows, err := db.Query("SELECT weight FROM express\_orders WHERE uid = ?", uid)
	if err != nil {
		fmt.Printf("Failed to query data: %v\n", err)
		return
	}
	for rows.Next() {
		var weight float64
		err = rows.Scan(&weight)
		if err != nil {
			fmt.Printf("Failed to read data: %v\n", err)
			continue
		}
		weightList = append(weightList, weight)
	}
	return weightList
}

在这里插入图片描述

六、实践(运费清单计算和测试程序)

在这里插入图片描述

问题 1 代码如下:

package main

import (
	"fmt"
	"math"
)

func main() {
	var weight float64
	fmt.Print("请输入实际重量(单位:KG):")
	fmt.Scanf("%f", &weight)
	if weight > 0 && weight <= 100 {
		fee := compute(weight)
		fmt.Printf("快递费用为 %d 元。\n", fee)
	} else {
		fmt.Println("实际重量输入错误!!!")
	}
}

// 计算快递费用
func compute(number float64) int {
	// 快递费用
	fee := 0
	// 计费重量,实际重量向上取整
	weight := int(math.Ceil(number))

	// 计算费用
	switch weight == 1 {
	case false:
		newFee := float64(18)
		for i := 2; i <= weight; i++ {
			newFee = 5 + newFee\*1.01
		}
		newFee = math.Round(newFee)
		fee = int(newFee)
	default:
		fee = 18
	}
	return fee
}


测试:输入0
在这里插入图片描述
测试:输入0.81192
在这里插入图片描述
测试:输入2.996
在这里插入图片描述
测试:输入99.99
在这里插入图片描述
测试:输入100
在这里插入图片描述

测试:输入101
在这里插入图片描述

问题 2 :

生成数据的代码:

package main

import (
	"database/sql"
	"fmt"
	"math/rand"
	"sort"
	"sync"

	// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。
	\_ "github.com/mattn/go-sqlite3"
)

var db \*sql.DB
var err error

func main() {
	db, err = sql.Open("sqlite3", "data.db")
	if err != nil {
		fmt.Printf("Database creation failed: %v\n", err)
		return
	}
	// 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询
	defer db.Close()

	// 连接数据库
	connectDB()

	// 创建数据库表
	//createTable()

	// 生成 1000 个用户 id
	createUid()

	var wg sync.WaitGroup
	wg.Add(10)

	// 创建 10 个协程,同时往数据库里插数据
	for i := 0; i < 10; i++ {
		go func() {
			// 生成 100000 条订单记录并插入数据库中
			createRecords()
		}()
	}
	wg.Wait()

}

// 用户 id
var uidList = make([]int, 1000)

// 生成 1000 个用户 id
func createUid() {
	for i := 0; i < 1000; i++ {


![img](https://img-blog.csdnimg.cn/img_convert/faa30e4f0834093b94d1a8128a86305b.png)
![img](https://img-blog.csdnimg.cn/img_convert/b9986dac67ec2ee1283db46b659380de.png)
![img](https://img-blog.csdnimg.cn/img_convert/8dcc68368f9f52281b9c708f72d4a9df.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

unc() {
			// 生成 100000 条订单记录并插入数据库中
			createRecords()
		}()
	}
	wg.Wait()

}

// 用户 id
var uidList = make([]int, 1000)

// 生成 1000 个用户 id
func createUid() {
	for i := 0; i < 1000; i++ {


[外链图片转存中...(img-w8752ZqY-1715372279213)]
[外链图片转存中...(img-MRPFJC0u-1715372279213)]
[外链图片转存中...(img-nXbp4ZDy-1715372279214)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLite数据库是一种轻量级的关系型数据库管理系统,具有小巧、快速、易用等特点,常用于嵌入式开发和移动应用开发。入门教程是帮助初学者快速掌握SQLite数据库基础知识和操作技巧的指南。 首先,SQLite数据库入门教程会介绍SQLite的特点和优势,以及适用的场景和应用领域。然后,教程会详细介绍如何安装和配置SQLite数据库括下载安装SQLite软件和设置环境变量等步骤。 接着,教程会教授SQL语言的基本知识,括创建数据库、表和字段等操作,以及对数据进行插入、查询、更新和删除等操作。通过实例演示和练习,初学者可以逐步掌握SQL语句的使用方法和编写技巧,提高数据库操作的熟练程度。 此外,入门教程还会介绍常用的SQLite命令行工具和GUI工具,如sqlite3、SQLiteStudio等,以及它们的使用方法和功能特点。初学者可以通过这些工具更方便地管理和操作SQLite数据库。 最后,教程还会介绍SQLite数据库的高级特性和扩展功能,如事务处理、索引优化、触发器等,帮助初学者进一步深入了解和应用SQLite数据库的高级技术。 总之,SQLite数据库入门教程是一个系统而全面的学习指南,能够帮助初学者快速入门并掌握SQLite数据库的基础知识和操作技巧。无论是对于嵌入式开发还是移动应用开发,学习SQLite数据库都是非常有帮助的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值