目录

一. 配置mysql驱动包
second_projectgo mod init second_projectgo get github.com/go-sql-driver/mysql"github.com/go-sql-driver/mysql"
二. 前置操作
package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"time"
)
var(
	// 1. 打开连接
	db, err = sql.Open("mysql", "root:123456@tcp(47.93.53.196:3306)/godatabase?charset=utf8")
)

func checkErr(err error, errMsg string)  {
	if err != nil {
		fmt.Println(errMsg)
		return
	}
}
三. 增加数据操作
/**
增加数据的操作
 */
func increate()  {
	// 打开数据库必须的操作
	db.Ping()
	if err != nil {
		fmt.Println("数据库连接失败")
		return
	}
	defer func() {
		if db != nil {
			db.Close()
		}
	}()

	// 2. 预处理sql语句
	stmt, err := db.Prepare("insert into people values(default, ?, ?)")
	defer func() {
		if stmt != nil {
			stmt.Close()
		}
	}()
	if err != nil {
		fmt.Println("处理失败")
		return
	}
	//参数和占位符对应
	r, err := stmt.Exec("张三", "海淀")

	if err != nil {
		fmt.Println(err)
		fmt.Println("sql失败")
		return
	}
	// 获取结果
	count, err :=r.RowsAffected()
	if err != nil {
		fmt.Println("结果获取失败")
		return
	}
	if count > 0{
		fmt.Println("新增成功")
	}else {
		fmt.Println("新增失败")
	}
	id, _ := r.LastInsertId()
	fmt.Println(id)
}
四. 更新数据操作
/**
更新数据库的操作
 */
func update()  {
	// 打开数据库必须的操作
	db.Ping()
	if err != nil {
		fmt.Println("数据库连接失败")
		return
	}
	defer func() {
		if db != nil {
			db.Close()
		}
	}()

	// 2. 预处理sql语句
	stmt, err := db.Prepare("update people set name=?,address=? where id=?")
	defer func() {
		if stmt != nil {
			stmt.Close()
		}
	}()
	if err != nil {
		fmt.Println("处理失败")
		return
	}
	//参数和占位符对应
	r, err := stmt.Exec("张三", "朝阳", 3)

	if err != nil {
		fmt.Println(err)
		fmt.Println("sql执行失败")
		return
	}
	// 获取结果
	count, err :=r.RowsAffected()
	checkErr(err, "结果获取失败")
	if count > 0{
		fmt.Println("更新成功")
	}else {
		fmt.Println("更新失败")
	}

}

五. 删除操作
/**
删除数据操作
 */
func delete()  {
	db.Ping()
	if err !=  nil {
		fmt.Println("数据库连接失败")
	}
	defer func() {
		if db != nil {
			db.Close()
		}
	}()
	stmt, err := db.Prepare("delete from people where id = ?")
	if err != nil {
		fmt.Println("预处理sql失败")
		return
	}

	defer func() {
		if stmt != nil{
			stmt.Close()
		}
	}()
	r, err := stmt.Exec(1)
	if err != nil {
		fmt.Println("执行sql失败")
		return
	}
	count, err := r.RowsAffected()
	if  count > 0 {
		fmt.Println("删除成功")
	}else{
		fmt.Println("删除失败")
	}
}
六. 查询数据操作

6.1 查询一部分数据

/**
查询数据库的一部分数据
*/
func SelectSomeData(name1 string) {
	checkErr(err, "数据库连接失败")

	defer func() {
		if db != nil {
			db.Close()
		}
	}()
	stmt, err := db.Prepare("select * from people where name = ?")
	checkErr(err, "预处理失败")
	defer func() {
		if stmt != nil{
			stmt.Close()
		}
	}()
	var (
		id int
		name string
		address string
	)
	rows := stmt.QueryRow(name1)
	rows.Scan(&id, &name, &address)
	fmt.Println(id, name, address)
}

6.2 查询全部数据

/**
查询数据库的全部数据
*/
func SelectAllData() {
	checkErr(err, "数据库连接失败")
	defer func() {
		if db != nil {
			db.Close()
		}
	}()
	stmt, err := db.Prepare("select * from people")
	checkErr(err, "预处理失败")
	defer func() {
		if stmt != nil{
			stmt.Close()
		}
	}()
	rows, err := stmt.Query()
	checkErr(err, "查询出错")
	defer func() {
		if rows != nil{
			rows.Close()
		}
	}()
	for rows.Next()  {
		var id int
		var name string
		var address string
		rows.Scan(&id, &name, &address)
		fmt.Println(id, name, address)
	}
}