golang原生对mysql的操作

GO语言基础教程(217)go-mysql操作MySQL数据库之新建数据表:Go语言MySQL新手避坑指南:别再用ORM啦!手把手教你原生操作建表 Go语言操作MySQL一点都不难!这篇保姆级教程手把手教你用go-mysql驱动建立数据表,从环境配置到完整代码实现,附带避坑指南和实战技巧。256字带你从小白到入门,掌握数据库连接、SQL执行、错误处理等核心技能,看完就能写出靠谱的Go+MySQL项目! 阅读详情

下载驱动

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

如果提示这样的失败信息:cannot download, $GOPATH not set. For more details see: go help gopath,可以使用如下命令解决

sudo env GOPATH=/Users/chenjiebin/golang go get github.com/go-sql-driver/mysql

GOPATH的值根据自行环境进行替换。

创建测试表

在mysql test库中创建测试表

CREATE TABLE IF NOT EXISTS `test`.`user` (
 `user_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户编号',
 `user_name` VARCHAR(45) NOT NULL COMMENT '用户名称',
 `user_age` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户年龄',
 `user_sex` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户性别',
 PRIMARY KEY (`user_id`))
 ENGINE = InnoDB
 AUTO_INCREMENT = 1
 DEFAULT CHARACTER SET = utf8
 COLLATE = utf8_general_ci
 COMMENT = '用户表'

数据库连接

数据库连接使用datebase/sql Open函数进行连接

1
db, err := sql.Open("mysql", "user:password@tcp(localhost:5555)/dbname?charset=utf8")

其中连接参数可以有如下几种形式:

user@unix(/path/to/socket)/dbname?charset=utf8
user:password@tcp(localhost:5555)/dbname?charset=utf8
user:password@/dbname
user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname

通常我们都用第二种。

插入操作

1
2
3
4
5
6
7
stmt, err := db.Prepare(`INSERT user (user_name,user_age,user_sex) values (?,?,?)`)
checkErr(err)
res, err := stmt.Exec("tony", 20, 1)
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)

这里使用结构化操作,不推荐使用直接拼接sql语句的方法。

查询操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
rows, err := db.Query("SELECT * FROM user")
checkErr(err)
 
for rows.Next() {
    var userId int
    var userName string
    var userAge int
    var userSex int
    rows.Columns()
    err = rows.Scan(&userId, &userName, &userAge, &userSex)
    checkErr(err)
    fmt.Println(userId)
    fmt.Println(userName)
    fmt.Println(userAge)
    fmt.Println(userSex)
}

这里查询的方式使用声明4个独立变量userId、userName、userAge、userSex来保存查询出来的每一行的值。在实际开发中通常会封装数据库的操作,对这样的查询通常会考虑返回字典类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//构造scanArgs、values两个数组,scanArgs的每个值指向values相应值的地址
columns, _ := rows.Columns()
scanArgs := make([]interface{}, len(columns))
values := make([]interface{}, len(columns))
for i := range values {
    scanArgs[i] = &values[i]
}
 
for rows.Next() {
    //将行数据保存到record字典
    err = rows.Scan(scanArgs...)
    record := make(map[string]string)
    for i, col := range values {
        if col != nil {
            record[columns[i]] = string(col.([]byte))
        }
    }
    fmt.Println(record)
}

修改操作

1
2
3
4
5
6
7
stmt, err := db.Prepare(`UPDATE user SET user_age=?,user_sex=? WHERE user_id=?`)
checkErr(err)
res, err := stmt.Exec(21, 2, 1)
checkErr(err)
num, err := res.RowsAffected()
checkErr(err)
fmt.Println(num)

删除操作

1
2
3
4
5
6
7
stmt, err := db.Prepare(`DELETE FROM user WHERE user_id=?`)
checkErr(err)
res, err := stmt.Exec(1)
checkErr(err)
num, err := res.RowsAffected()
checkErr(err)
fmt.Println(num)

修改和删除操作都比较简单,同插入数据类似,只是使用RowsAffected来获取影响的数据行数。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main
 
import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)
 
func main() {
    insert()
}
 
//插入demo
func insert() {
    db, err := sql.Open("mysql", "root:@/test?charset=utf8")
    checkErr(err)
 
    stmt, err := db.Prepare(`INSERT user (user_name,user_age,user_sex) values (?,?,?)`)
    checkErr(err)
    res, err := stmt.Exec("tony", 20, 1)
    checkErr(err)
    id, err := res.LastInsertId()
    checkErr(err)
    fmt.Println(id)
}
 
//查询demo
func query() {
    db, err := sql.Open("mysql", "root:@/test?charset=utf8")
    checkErr(err)
 
    rows, err := db.Query("SELECT * FROM user")
    checkErr(err)
 
    //普通demo
    //for rows.Next() {
    //    var userId int
    //    var userName string
    //    var userAge int
    //    var userSex int
 
    //    rows.Columns()
    //    err = rows.Scan(&userId, &userName, &userAge, &userSex)
    //    checkErr(err)
 
    //    fmt.Println(userId)
    //    fmt.Println(userName)
    //    fmt.Println(userAge)
    //    fmt.Println(userSex)
    //}
 
    //字典类型
    //构造scanArgs、values两个数组,scanArgs的每个值指向values相应值的地址
    columns, _ := rows.Columns()
    scanArgs := make([]interface{}, len(columns))
    values := make([]interface{}, len(columns))
    for i := range values {
        scanArgs[i] = &values[i]
    }
 
    for rows.Next() {
        //将行数据保存到record字典
        err = rows.Scan(scanArgs...)
        record := make(map[string]string)
        for i, col := range values {
            if col != nil {
                record[columns[i]] = string(col.([]byte))
            }
        }
        fmt.Println(record)
    }
}
 
//更新数据
func update() {
    db, err := sql.Open("mysql", "root:@/test?charset=utf8")
    checkErr(err)
 
    stmt, err := db.Prepare(`UPDATE user SET user_age=?,user_sex=? WHERE user_id=?`)
    checkErr(err)
    res, err := stmt.Exec(21, 2, 1)
    checkErr(err)
    num, err := res.RowsAffected()
    checkErr(err)
    fmt.Println(num)
}
 
//删除数据
func remove() {
    db, err := sql.Open("mysql", "root:@/test?charset=utf8")
    checkErr(err)
 
    stmt, err := db.Prepare(`DELETE FROM user WHERE user_id=?`)
    checkErr(err)
    res, err := stmt.Exec(1)
    checkErr(err)
    num, err := res.RowsAffected()
    checkErr(err)
    fmt.Println(num)
}
 
func checkErr(err error) {
    if err != nil {
        panic(err)
    }
}

小结

整体上来说都比较简单,就是查询那边使用字典来存储返回数据比较复杂一些。既然说到数据库连接,通常应用中都会使用连接池来减少连接开销,关于连接池下次整理一下再放上来。

go连接数据库 文章目录原生 sql 连接数据库使用 gorm 连接数据库 原生 sql 连接数据库 func main() { // 账号 username := "root" // 密码 password := "123456" // mysql 服务地址 host := "127.0.0.1" // 端口 port := 3306 // 数据库名 Dbname := "Dbname" // 拼接 mysql dsn,即拼接数据源,下方 {} 中的替换参数即可 // 阅读详情

相关推荐

LSCM最小二乘保角参数化

LSCM最小二乘保角参数化 最小二乘思想 已知一组点的数据(x,y) x x1x_1x1​ x2x_2x2​ x3x_3x3​ … xnx_nxn​ y y1y_1y1​ y2y_2y2​ y3y_3y3​ … yny_nyn​ 可以近似为线性关系 y=ax+by=ax+by=ax+b ,目标为确定常数 aaa , bbb ; 解法:找到 aaa , bbb ,使得所有 yiy_iyi​ 与 axi+bax_i+baxi​+b 偏差的平方和 Q=∑i=1n(yi−axi−b)2 Q=\s

weixin_49732532的博客 4254

go连接数据库(原生)

根据官网文档可以看到go可以连接的关系型数据库​常用的关系型数据库基本上都支持,下面以mysql为例。

qq_62408075的博客 1873

极空间NAS小白也能搞定的Gitea部署:Docker+MySQL避坑全记录

本文为极空间NAS用户提供了一份详尽的Gitea私有代码仓库部署指南。针对极空间ARM架构和图形化Docker管理的特殊性,文章重点讲解了如何通过Docker和MySQL容器进行部署,并提供了三种获取兼容镜像的实战策略,特别是利用第三方镜像站转录的方法,帮助小白用户成功搭建并初始化Gitea服务,实现私有Git托管。

weixin_28318011的博客 368

【搞定Go语言】第3天1:Go语言操作MySQL

MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库。 Go操作MySQL 连接 Go语言中的database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。使用database/sql包时必须注入(至少)一个数据库驱动。 我们常用的数据库基本上都有完整的第三方实现。例如:MySQL驱动 下载依赖 go get -u github.com/go-sql-driver/mysql 使用MySQL驱动 func Open(driverName, dat

就叫一片白纸的博客 840

FPGA+滨淞CCD实战:手把手教你搭建S7031/S10142成像电路(附避坑指南)

本文详细介绍了使用FPGA驱动滨淞CCD传感器(S7031/S10142)构建高精度成像系统的完整实战流程。内容涵盖核心器件选型、系统架构规划、电路板(焦面板与接口板)设计要点、FPGA Verilog逻辑实现,并提供了从电源管理、信号调理到数据采集的详细避坑指南,帮助读者从零搭建稳定可靠的成像电路。

weixin_29271263的博客 227

AURIX-TC3xx-GTM详解六-DPLL(Digital PLL Module)-寄存器1-DPLL寄存器

主要有下图这些寄存器2、

m0_69929716的博客 441

Golang之mysql

github.com/jinzhu/gorm 是Gorm v1的地址; gorm.io/gorm 是Gorm v2的地址;

fourierr的博客 1846

【数据清洗】数据清洗流程及经验

预处理阶段 预处理阶段主要做两件事情: 一是将数据导入处理工具。 二是看数据。包含两个部分:一是看元数据,包括字段解释、数据来源、代码表等等一切描述数据的信息;二是抽取一部分数据,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备。 第一步:缺失值清洗 四个步骤: 1、确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略。 2、去除不需要的...

JoJo93723的博客 6497

【Golang学习之旅】Go + MySQL 数据库操作详解

✅ 适合人群:Go 后端开发者 | 数据库开发者 | 想掌握 GORM 的工程师✅ 文章亮点:从 安装、基础操作、CRUD、事务、索引优化 到 进阶技巧,全面解析 GORM✅ 目标:掌握 Go 语言 + MySQL(GORM),开发高效数据库应用!GORM是Go语言最流行的ORM框架,它提供了一套强大且简介的数据库操作API,相比,它具备以下优势:✅ 代码简洁:无需手写 SQL,使用链式调用✅ 支持自动迁移:可自动创建和更新数据库表结构✅ 支持事务、预加载、钩子函数。

程序员林北北的博客 1718

Coze HTTP请求节点实战:5分钟搞定天气API对接(含动态参数技巧)

本文通过一个天气预报API对接的实战案例,详细讲解了如何在Coze平台使用HTTP请求节点实现外部数据交互。文章重点演示了动态参数传递、JSON响应解析与错误处理等核心技巧,帮助开发者在5分钟内快速构建稳定可靠的智能体外部服务调用能力。

weixin_29233333的博客 676

视觉测量实战:C#上位机+OpenCVSharp 实现工业零件尺寸自动检测(精准像素级,工业级可落地)

本次开发的上位机界面遵循工业现场操作规范简洁、直观、按钮大、文字清晰、参数可视化调节,操作人员为车间工人/质检员,无需复杂操作,所有控件均为WinForms原生控件,拖拽即可完成布局本次实战完成了C#上位机+OpenCVSharp 工业零件尺寸自动检测系统的完整开发,这套方案是工业视觉测量的标准落地方案,适配95%的规则几何零件的尺寸检测场景,从五金件、塑胶件到电子元件,全覆盖无死角。测量效率提升100倍、精度提升10倍、无人工误差、可适配流水线实时检测。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 850

golang操作mysql利器-gorm

总之,gorm是一个对go开发者非常友好且使用简单的db操作库,非常容易上手,学习成本很低,推荐使用。上面对操作数据库的基本操作已经介绍的七七八八了,完全可以满足日常开发,总结出来共享给更多的小伙伴,希望对大家有所帮助。

liupenglove的专栏 2010

置顶必读(1) | 滚雪球学Oracle教程导航帖,带你弯道超车(持续更新中)

什么是数据库管理系统(DBMS),Oracle在行业中的领先地位Oracle数据库的市场竞争与主要应用场景Oracle数据库的核心功能模块与未来技术发展趋势约束的高级应用:主键、唯一性、外键设计与管理表分区、视图、同义词与序列的最佳实践PL/SQL编程的设计哲学,如何高效使用Oracle SQL DeveloperPL/SQL代码调试与优化技巧RAC集群中的高可用性设计,负载均衡与并行查询的配置集群中的缓存一致性管理。

**My Coding Family** 1万+

go mysql orm_go语言操作MySql数据库(原生与ORM方式)

一.原生方式golang其实官方不提供连接mysql实现,先下载第三方的实现https://github.com/golang/go/wiki/SQLDrivers该地址可以看到所以的驱动包.这里选择了Go-MySQL-Driver这个实现使用如下命令即可go get github.com/go-sql-driver/mysql1.连接数据库conn,err := sql.Open("mysql"...

weixin_42488050的博客 1348

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

mysql 原生 添加数据_Golang原生sql操作Mysql数据库增删改查

Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用。首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动,下载完成之后会在GOPATH下的src/github.com目录下//路由文件package routersimport ("github.com/astaxie/beego""mypro/contr...

weixin_42402228的博客 351

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

go 连接 mysql框架_GO语言Gin框架数据库操作(原生、xorm、gorm)

数据库是业务应用的核心,本节主要讲解gin框架(Go语言)操作原生数据库、go语言数据库ORM框架(gorm和xorm)。1.原生数据库package mainimport ("database/sql""fmt""github.com/gin-gonic/gin"_ "github.com/go-sql-driver/mysql""net/http")var sqlDb *sql.DB ...

weixin_29029169的博客 1894

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

golang gorm 增删改查以及使用原生SQL(以操作mysql为例)

gorm 操作mysql 增删改查以及使用原生sql

qq_43058348的博客 1970

Go 操作 MySQL 示例(原生 SQL + GORM)

go访问mysql需要进行导包.就这里需要注意点. import ( //mysql的驱动包 _ "github.com/Go-SQL-Driver/MySQL" "database/sql" "fmt" ) func checkErr(err error) { if err != nil { panic(err) } } /** 这玩意是写一行代...

长河的博客 1247

Go 语言原生 SQL 操作 MySQL 超详细全解 + 生产级项目模板(纯官方库无ORM)

在 Go 项目开发中,操作数据库是必备核心技能。很多新手一上来就用 GORM、XORM 等 ORM 框架,但掌握原生 SQL 操作才是根基 —— 性能更高、可控性更强、适配所有复杂查询。Go 官方标准库 提供了统一的数据库操作接口,搭配对应数据库驱动(如 MySQL、PostgreSQL),即可完成增删改查、事务、预处理、连接池等所有数据库操作。本文全程使用 Go 原生标准库,无任何第三方 ORM 依赖,包含:环境搭建、增删改查、预处理语句、事务、连接池配置、注意事项、避坑指南,可直接复制发布 优快云。

m0_72664637的博客 414

go语言操作MySql数据库(原生与ORM方式)

一.原生方式 golang其实官方不提供连接mysql实现,先下载第三方的实现 https://github.com/golang/go/wiki/SQLDrivers 该地址可以看到所以的驱动包.这里选择了Go-MySQL-Driver这个实现 使用如下命令即可 go get github.com/go-sql-driver/mysql ...

金福林的博客 6049

go mysql 中间件_Golang常用的中间件使用总结

从接触go到现在大概接近一年时间了吧,主要用它来开发GPU集群管理的client端以及一些小的工具,例如:服务端mock测试、ID生成器等,给我的感觉就是高性能、低消耗、够轻量,所以在目前容器化、微服务化火热的今天,其扮演着重要角色,如:docker、k8s、istio、prometheus等都是基于go开发,国内很多一线大厂都开始主推go作为他们的服务端开发语言,如:头条、B站、流利说等,其生态...

weixin_36274181的博客 1047

Golang原生sql操作Mysql数据库增删改查

Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用。 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动,下载完成之后会在GOPATH下的src/github.com目录下 go get -u github.com/go-sql-driver/mysql 然后本地的mysql服务要启动,并...

weixin_30276935的博客 927

go操作mysql(原生database/sql, sqlx库)GORM

参考: Go语言操作MySQL | 李文周的博客 安装: go get -u github.com/go-sql-driver/mysql 示例: package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) // go get -u github.com/go-sql-driver/mysql // 定义一个全局对象db var db *sql.DB // 定义一个初始化数据库的

贵有恒,何必三更眠五更起;最无益,只怕一日曝十日寒 926

使用Python3和Golang对MYSQL进行操作

Python操作mysql python3需要使用的第三方包:pymysql、sqlalchemy 概念性的东西不多介绍,有想了解的推荐一篇博文:https://www.jianshu.com/p/65903a69d61d 下面给出了一个简单的实例: from sqlalchemy import create_engine, Column, BIGINT, DateTime, Strin...

霹雳吧啦Wz 963

66.Go从零搭建一个orm框架【简版】

文章目录一:前置学习1、 为什么要用orm2、Golang里面是如何原生连接MySQL的3、ORM框架构想二: 开始造1、连接Connect2、设置/读取表名Table/GetTable3、新增/替换Insert/Replace4、条件Where5、条件OrWhere6、删除Delete7、修改Update8、查询9、设置查询字段Field10、设置大小Limit11、聚合查询Count/Max/Min/Avg/Sum12、排序Order13、分组Group14、分组后判断Having15、获取执行生成的完

YouMing_Li的博客 1359

百亿数据百亿花, 库若恒河沙复沙,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang数据库操作实践EP12

Golang可以通过Gorm包来操作数据库,所谓ORM,即Object Relational Mapping(数据关系映射),说白了就是通过模式化的语法来操作数据库的行对象或者表对象,对比相对灵活繁复的SQL语句,ORM上手简单,通用性较高,但是在性能层面略有损耗,Gorm的底层是结构体对象,关于结构体,请移玉步至:你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06。首先如果要使用Gorm操作数据库,得先有数据库才行,这里为了全平台统

「 虚幻私塾」 201
上一篇: swoole websocket 支持ssl,修改成https
下一篇: golang解析复杂的json对象
yí無所冇
博客等级 码龄9年 78粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值