Go后端:存储与数据库(二)MySQL代码基础实战| 青训营笔记

123 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第9天

内容梗概

本文主要梳理了以下内容:

  1. 啊啊
  2. 俺是

1 准备工作

在开始基于Go语言的MySQL代码基础实战前,首先要确保已下载并安装好 MySQL至本地,并设置好系统环境变量。一切设置好之后即可通过系统控制窗口(cmd)VS Code对MySQL的本地数据库进行相关操作。

1.1 开启MySQL本地连接

注意,在安装过程中包含了数据库用户和密码的设置。安装完成后在cmd输入:

mysql -uroot -p    

1.2 显示数据库列表

show databases;    //显示可用数据库的列表(注意SQL命令后有“;”)

1.3 创建一个数据库

image.png

1.4 下载好第三方包

终端输入:

go get -u github.com/go-sql-driver/mysql

依赖安装完成后,如图:

image.png

以上完成了基于Go语言的MySQL编程的准备工作。

2 "database/sql"代码基础入门

2.1 数据库连接

主要包含sql.Open()db.Ping()方法。前者仅检验输入格式的正确性,后者还会校验用户名密码等是否匹配(真的连接)。

示例代码

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql" //init()
)

// Go连接MySQL示例
func main() {
	//dsn:data source name
	dsn := "username:password@tcp(127.0.0.1:3306)/databasename"//修改好用户名、密码、数据库名、网络地址
	db, err := sql.Open("mysql", dsn) //Open不会判断用户名和密码是否正确,只看格式正确性
	if err != nil {                   //若dsn格式不正确,则报错
		fmt.Printf("dsn:%s invalid,\nerr:%v\n", dsn, err)
		return
	}
	err = db.Ping() //尝试连接数据库
	if err != nil {
		fmt.Printf("open %s failed,\nerr:%v\n", dsn, err)
		return
	} else {
		fmt.Println("连接数据库成功!")
		defer db.Close()
	}
}

我们期望将对数据库的各种操作都抽象(简化)成一个个可调用的函数,那么对于数据库的初始化连接过程,可以改写成initDB()函数:

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql" //init()
)

var db *sql.DB //定义全局DB(一个数据库连接池对象)

func initDB() (err error) {
	dsn := "username:password@tcp(127.0.0.1:3306)/databasename"
	//***注意***:db用的是上面的全局变量,【去冒号,不要重复定义】
	db, err = sql.Open("mysql", dsn)
	if err != nil {
		return    //默认返回err
	}
	err = db.Ping() //尝试连接数据库
	if err != nil {
		return
	}
	return
}

func main() {
	err := initDB()
	if err != nil {
		fmt.Printf("init DB failed,\nerr:%v\n", err)
	} else {
		fmt.Println("连接数据库成功!")
	}
}

2.2 MySQL基本功能的Go函数实现

2.2.1 CRUD 增查改删

CRUD主要被用在描述软件系统中数据库或者持久层的基本操作功能:增加(Create)、读取(Read)、更新(Update)和删除(Delete),即“增查改删”。

2.2.1.1 MySQL基本操作

在MySQL创建一个数据库:

create database sql_test;

进入该数据库:

use sql_test;

对应MySQL执行以下命令,创建一张用于测试的数据表(空表):

CREATE TABLE `user` (
    `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(20) DEFAULT '',
    `age` INT(11) DEFAULT '0',
    PRIMARY KEY(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

增加

使用insert关键字插入数据。

插入一条数据:

insert into user(name,age) values("周杰伦",44);
insert into user(name,age) values("王力宏",8888);
insert into user(name,age) values("待删",777);

查询

使用select关键字查询。

select * from user;

修改

使用updatesetwhere关键字,完成定位和修改数据。

update user
set age=8888
where id=2;

删除: 使用deletewhere关键字,定位和删除目标数据。

delete from user
where id=3;
2.2.1.2 Go函数实现

为了方便查询,我们事先定义好一个结构体来存储user表的数据。

//Go语句
type user struct {
	id   int
	age  int
	name string
}