栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Go~入门级别,Go操作Mysql进行CRUD和事务

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go~入门级别,Go操作Mysql进行CRUD和事务

文章目录
  • 前言
    • 建表
    • 依赖
    • 建立连接需要的常量
    • 建立连接
    • CRUD和事务

前言

无技术含量,只是用于入门做一个简单的笔记,以防后面忘记了。

建表
CREATE  DataBase go_mysql_study;
Use go_mysql_study;

CREATE TABLE `person` (
                          `user_id` int(11) NOT NULL AUTO_INCREMENT,
                          `username` varchar(260) DEFAULT NULL,
                          `sex` varchar(260) DEFAULT NULL,
                          `email` varchar(260) DEFAULT NULL,
                          PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE place (
                       country varchar(200),
                       city varchar(200),
                       telcode int
)ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
依赖

使用 go mod 项目

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
	"strings"
)
建立连接需要的常量
const (
	userName = "root"           //登录Mysql的用户名
	password = "listen"         //对应用户名的密码
	ip       = "127.0.0.1"      //ip地址
	port     = "3306"           //端口
	dbName   = "go_mysql_study" //数据库名字
)
建立连接
var Db *sqlx.DB

func init() {
	InitDB()
}

func InitDB() {
	//构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
	path := strings.Join([]string{userName, ":", password, "@tcp(", ip, ":", port, ")/", dbName, "?charset=utf8"}, "")

	//打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql"
	database, err := sqlx.Open("mysql", path)
	if err != nil {
		fmt.Println("open mysql failed,", err)
		return
	}
	//验证连接
	if err := database.Ping(); err != nil {
		fmt.Println("open database fail")
		return
	}
	//设置数据库最大连接数
	database.SetConnMaxLifetime(100)
	//设置上数据库最大闲置连接数
	database.SetMaxIdleConns(10)
	Db = database

	fmt.Println("connect success")
}
CRUD和事务
type Person struct {
	UserId   int    `db:"user_id"`
	Username string `db:"username"`
	Sex      string `db:"sex"`
	Email    string `db:"email"`
}

type Place struct {
	Country string `db:"country"`
	City    string `db:"city"`
	TelCode int    `db:"telcode"`
}

func main() {
	//insertTest()

	//selectTest()

	//updateTest()

	//deleteTest()

	//transactionTest()
}

func insertTest() {
	r, err := Db.Exec("insert into person(username, sex, email)values(?, ?, ?)", "stu001", "man", "stu01@qq.com")
	if err != nil {
		fmt.Println("exec failed, ", err)
		return
	}
	id, err := r.LastInsertId()
	if err != nil {
		fmt.Println("exec failed, ", err)
		return
	}

	fmt.Println("insert success:", id)
	defer Db.Close()
}

func selectTest() {
	var person []Person
	err := Db.Select(&person, "select user_id, username, sex, email from person where user_id=?", 2)
	if err != nil {
		fmt.Println("exec failed, ", err)
		return
	}

	fmt.Println("select success:", person)
	defer Db.Close()

}

func updateTest() {
	res, err := Db.Exec("update person set username=? where user_id=?", "stu0003", 2)
	if err != nil {
		fmt.Println("exec failed, ", err)
		return
	}
	row, err := res.RowsAffected()
	if err != nil {
		fmt.Println("rows failed, ", err)
	}
	fmt.Println("update succ:", row)
	defer Db.Close()

}

func deleteTest() {
	res, err := Db.Exec("delete from person where user_id=?", 1)
	if err != nil {
		fmt.Println("exec failed, ", err)
		return
	}

	row, err := res.RowsAffected()
	if err != nil {
		fmt.Println("rows failed, ", err)
	}

	fmt.Println("delete succ: ", row)
	defer Db.Close()

}



func transactionTest() {
	conn, err := Db.Begin()
	if err != nil {
		fmt.Println("begin failed :", err)
		return
	}

	r, err := conn.Exec("insert into person(username, sex, email)values(?, ?, ?)", "stu001", "man", "stu01@qq.com")
	if err != nil {
		fmt.Println("exec failed, ", err)
		conn.Rollback()
		return
	}
	id, err := r.LastInsertId()
	if err != nil {
		fmt.Println("exec failed, ", err)
		conn.Rollback()
		return
	}
	fmt.Println("insert succ:", id)

	r, err = conn.Exec("insert into person(username, sex, email)values(?, ?, ?)", "stu001", "man", "stu01@qq.com")
	if err != nil {
		fmt.Println("exec failed, ", err)
		conn.Rollback()
		return
	}
	id, err = r.LastInsertId()
	if err != nil {
		fmt.Println("exec failed, ", err)
		conn.Rollback()
		return
	}
	fmt.Println("insert succ:", id)

	conn.Commit()
	defer Db.Close()

}
  • 注意结构体的tag,要与表中的字段一样哦~
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/903812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号