Go操作mysql数据库增删改查

一.查询单条数据

查询单条数据使用QueryRow

1.将数据库连接封装成单独的函数

var db *sql.DB //连接池对象

func initDB() (err error) {
	// DSN:Data Source Name
	dsn := "root:123456@tcp(127.0.0.1:3306)/test2"
	db, err = sql.Open("mysql", dsn) //open不会校验用户名和密码是否正确
	if err != nil {
		return
	}
	err = db.Ping()
	if err != nil {
		return
	}

	db.SetMaxOpenConns(10) //设置数据库连接池的最大连接数 10
	db.SetMaxIdleConns(5)  //设置最大空闲连接数
	return
}

2.定义一个结构体


type user struct { //结构体
	id   int
	name string
	age  int
}

3.构造一个查询单条数据的函数

func queryOne(id int) {
	var u1 user
	// 1.写查询单条记录的sql语句
	sqlStr := "select id,name,age from user where id =?;"
	//2.执行并拿到结果
	//必须对row对象调用scan方法,该方法会释放数据库连接
	db.QueryRow(sqlStr, id).Scan(&u1.id, &u1.name, &u1.age) //从连接池拿一个连接出去数据库查询单条记录
	//打印结果
	fmt.Println(u1)
}

注意:函数可以接受传入的值作为sql语句中的条件。scan方法将查的结果复制给user 然后关闭结果集。

4.main函数中

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

	queryOne(2)
	
}

结果
在这里插入图片描述
二.查询多条数据

查询多条数据使用Query

1.定义一个查询多条数据的函数

func queryMore(n int) {
	//1.sql语句
	sqlStr := "select id,name,age from user where id >?;"
	//2.执行
	rows, err := db.Query(sqlStr, n)
	if err != nil {
		fmt.Println(err)
		return
	}
	//3.一定要关闭rows
	defer rows.Close()
	//4.循环取值
	for rows.Next() {
		var u1 user
		err := rows.Scan(&u1.id, &u1.name, &u1.age)
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(u1)
	}
}

注意:一定要关闭 rows

2.main函数中调用以及打印结果
在这里插入图片描述
三.新增一条数据

注意:增删改数据都使用 Exec

1.定义一个新增数据的函数

func insert() {
	//写sql语句
	sqlStr := "insert into user(name,age) values ('feifei',20)"
	//exec
	ret, err := db.Exec(sqlStr)
	if err != nil {
		fmt.Printf("insert failed %v\n", err)
		return
	}
	//如果是插入操作,可以拿到插入数据的id
	id, err := ret.LastInsertId()
	if err != nil {
		fmt.Printf("get id failed %v\n", err)
		return
	}
	fmt.Println("id:", id)
}

2.main函数中调用以及执行结果
在这里插入图片描述
3.数据表
在这里插入图片描述
四.更新一条数据

1.更新数据的函数

func updateRow() {
	sqlStr := "update user set age=100 where id > 2"
	ret, err := db.Exec(sqlStr)
	if err != nil {
		fmt.Printf("update failed %v\n", err)
		return
	}
	//RowsAffected获取更新了几行
	n, err := ret.RowsAffected()
	if err != nil {
		fmt.Printf("get n failed %v\n", err)
		return
	}
	fmt.Printf("更新了%d行数据", n)
}

2.main中调用函数以及执行结果
在这里插入图片描述
3.数据库
在这里插入图片描述
注意:函数也可以接受一个数据传入

五.删除数据

1.删除数据的函数

func deleteRow(id int) {
	sqlStr := "delete from user where id >?"
	ret, err := db.Exec(sqlStr, id)
	if err != nil {
		fmt.Printf("delete failed %v\n", err)
		return
	}
	n, err := ret.RowsAffected()
	if err != nil {
		fmt.Printf("get n failed %v\n", err)
		return
	}
	fmt.Printf("删除了%d行数据", n)
}

2.main中调用函数以及执行结果
在这里插入图片描述
3.数据库
在这里插入图片描述

发布了38 篇原创文章 · 获赞 25 · 访问量 9725

猜你喜欢

转载自blog.csdn.net/weixin_44517681/article/details/104345915