Golang链接MySQL数据库

**# Golang链接MySQL数据库的操作

链接数据库

在链接MySQL数据库之前,我们需要先导入MySQL包

import (
    "gorm.io/driver/mysql"
    )

在导入gorm.io外部包时,可能出现错误

go get connectex: a connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

当出现此错误时,打开go的环境位置(…\go1.21.0\bin),运行cmd 或 鼠标右键-在终端中打开 输入

go env -w GOPROXY=https://goproxy.cn

回车运行,回到编译器再次同步项目的依赖关系即可解决

示例代码:

package main

import (
	"fmt"
	"gorm.io/driver/mysql"
)

func main() {
	db, err := gorm.Open(
		mysql.Open("root:123456@tcp(localhost:3306)/product?charset=utf8mb4"),
		&gorm.Config{},
	)
	if err != nil {
		panic("failed to connect database")
	}
	fmt.Println(db.Name())
}

链接失败提示:

请添加图片描述

连接成功提示:
请添加图片描述

接下来我们对代码进行分析

db, err := gorm.Open(
    mysql.Open("root:123456@tcp(localhost:3306)/product?charset=utf8mb4"),
    &gorm.Config{},
)
//root 为MySQL数据库用户名(可按照自己的配置更换)
//123456 为root账户的密码(按照自己配置更换)
//@tcp 是指通过tcp协议与数据库连接
//(localhost:3306) 是数据库地址以及端口(按照自己配置更换)
//product 为连接数据库的库名
//?以后的为指定的文件编码及其它指定(可选)

对数据库操作

在数据库操作之前,需要先行加入外部包

"gorm.io/gorm"

下面将对数据库的基本操作进行介绍:

此文章的数据库结构如下:
请添加图片描述

在如下代码中,使用Price表示cost字段,使用gorm可以配置主键、字段、默认值等,例如gorm:"default:D00"

type Product struct {
    ID    uint   `gorm:"primarykey"`
    Code  string `gorm:"column:code"` 
    Price uint   `gorm:"column:cost"`
}

增加条目

//增添一个条目(ID=1,Code=D42,price=6)
p := &Product{ID: 1, Code: "D42", Price: 6}
res := db.Create(p)
//输出错误,若无错误则为<nil>
fmt.Println(res.Error)
//输出增添条目的ID
fmt.Println(p.ID)
//增添多个条目(ID=2,Code=D41,price=5)(ID=3,Code=D42,price=8)(ID=4,Code=D43,price=0)
products := []*Product{{ID: 2, Code: "D41", Price: 5}, {ID: 3, Code: "D42", Price: 8}, {ID: 4, Code: "D43"}}
res = db.Create(products)
fmt.Println(res.Error)
//输出增添条目的ID
for _, p := range products {
    fmt.Println(p.ID)
}
c := &Product{Code: "D48", ID: 5}
//使用clause.OnConflict控制冲突解决,当没有发生错误时执行后面操作,当发生错误时什么也不做
//When err have accured then do noting,else do Create
db.Clauses(clause.OnConflict{DoNothing: true}).Create(&c)

此段代码执行结果为:请添加图片描述

查询操作

	//获取第一条记录
	u := &Product{}
	over := db.First(u)
	//输出得到的记录数
	fmt.Println(over.RowsAffected)
	//查询多条数据时,需要一个数组来保存得到的结果
	products := make([]*Product, 0)
	//select * from products where cost >3
	result := db.Where("cost>3").Find(&products)
	fmt.Println(result.RowsAffected)
	fmt.Println(result.Error)
	//输出的为其找到符合where条件的所有条目的地址
	fmt.Println(products)
	//select * from products where Code=48 AND price=0
	result = db.Where(&Product{Code: "D48", Price: 0}).Find(&products)
	fmt.Println(result.RowsAffected)
	fmt.Println(result.Error)
	//select * from products where Code=D42 AND cost>4
	result = db.Where("Code=? AND cost>4", "D42").Find(&products)
	fmt.Println(result.RowsAffected)
	fmt.Println(result.Error)
	//select * from products where Code=D41 AND Cost=5 
	result = db.Where(map[string]interface{}{"Code": "D41", "cost": 5}).Find(&products)
	fmt.Println(result.RowsAffected)
	fmt.Println(result.Error)

在上述增添结果下的查询执行结果
请添加图片描述

更新条目

//update products set code='D50',update_at='2023-8-11 17:17:50' where cost>7;
	update := db.Model(&Product{}).Where("cost>?", 7).Update("Code", "D50")
	fmt.Println(update.Error)
	//update products set Code="D51",cost=12,update_at='2023-8-11 17:17:50' where id=4
	update = db.Model(&Product{ID: 4}).Updates(map[string]interface{}{"Code": "D51", "cost": 12})
	fmt.Println(update.Error)
	//only update select field
	//update products set Code='D55',update_at='2023-8-11 17:17:50' where id=2
	update = db.Model(&Product{ID: 2}).Select("Code").Updates(map[string]interface{}{"Code": "D55", "cost": 10})
	fmt.Println(update.Error)
	//update products set cost=cost*2+5, update_at='2023-8-11 17:17:50' where id=1
	update = db.Model(&Product{ID: 1}).Update("cost", gorm.Expr("cost*?+?", 2, 5))
	fmt.Println(update.Error)

执行结果为未报错
请添加图片描述

在执行后数据库数据条目变为:
请添加图片描述

删除条目

//delete from products where id=6
delete1 := db.Delete(&Product{}, 5)
fmt.Println(delete1.Error)
//delete from products where id in(1,2,3)
delete1 = db.Delete(&Product{}, []int{1, 2, 3})
fmt.Println(delete1.Error)
//delete from products where Code LIKE %50%
delete1 = db.Where("Code LIKE ?", "%51%").Delete(Product{})
fmt.Println(delete1.Error)

执行结果:未出错
请添加图片描述

数据库变为空**

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值