Go语言入门心法(十):Go语言操作MYSQL(CRUD)

news2025/1/16 5:30:20


Go语言入门心法(一): 基础语法

Go语言入门心法(二): 结构体

Go语言入门心法(三): 接口

Go语言入门心法(四): 异常体系

 Go语言入门心法(五): 函数

Go语言入门心法(六): HTTP面向客户端|服务端编程

Go语言入门心法(八): mysql驱动安装报错onnection failed

Go语言入门心法(九): 引入三方依赖




一: go连接mysql数据库


package main

import (
	"database/sql"
	"fmt"
	"log"
	// 注册驱动器 _下划线表示执行驱动中的init函数,不使用其他函数
	_ "github.com/go-sql-driver/mysql"
)

/*
go语言连接mysql数据库操作:
*/
func main() {
	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/tope-pay-user")
	if err != nil {
		fmt.Println("数据库连接异常: ", err)
	}

	// 延迟执行Closer()函数
	defer db.Close()

	// 验证连接的可用性
	err = db.Ping()
	if err != nil {
		log.Fatal("数据库连接失败:", err)
	}
	log.Println("数据库连接成功: ", db.Stats())
}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_OOPMysqlToDatabaseLinkGrammar_go.exe D:\program_file\go_workspace\org.jd.data\database\OOPMysqlToDatabaseLinkGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_OOPMysqlToDatabaseLinkGrammar_go.exe
2023/10/18 18:55:22 数据库连接成功:  {0 1 0 1 0 0s 0 0 0}

Process finished with the exit code 0

二: go连接mysql创建表


package main

/*
创建表:
*/

import (
	"database/sql"
	"fmt"
	// 注册驱动器 _下划线表示执行驱动中的init函数,不使用其他函数
	_ "github.com/go-sql-driver/mysql"
	"log"
)

func main() {
	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/tope-pay-user")
	if err != nil {
		log.Fatal(err)
		fmt.Println("数据库连接异常: ", err)
	}

	// 延迟执行Closer()函数
	defer db.Close()

	// 验证连接的可用性
	err = db.Ping()
	if err != nil {
		log.Fatal("数据库连接失败:", err)
	}

	// 创建一张表
	createTable :=
		"CREATE TABLE `sys_go_dept` (" +
			"`deptid` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键'," +
			"`deptno` bigint(11) NOT NULL COMMENT '编码编号'," +
			"`dname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '部门名称'," +
			"`location` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '地点'," +
			"PRIMARY KEY (`deptid`)" +
			") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;"

	println(createTable)
	_, err = db.Exec(createTable)
	if err != nil {
		log.Fatal("创建表失败:", err)
	}
	log.Println("数据表创建成功")

}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database.exe D:\program_file\go_workspace\org.jd.data\database\OOPMysqlToDatabaseCreateTableGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database.exe
CREATE TABLE `sys_go_dept` (`deptid` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`deptno` bigint(11) NOT NULL COMMENT '编码编号',`dname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '部ocation` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '地点',PRIMARY KEY (`deptid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
2023/10/18 18:52:40 数据表创建成功

Process finished with the exit code 0

三: go插入数据


package main

import (
	"database/sql"
	// 注册驱动器 _下划线表示执行驱动中的init函数,不使用其他函数
	_ "github.com/go-sql-driver/mysql"
	"log"
)

func main() {
	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/tope-pay-user")
	checkErr(err)

	// 延迟执行Closer()函数
	defer db.Close()

	// 验证连接的可用性
	err = db.Ping()
	checkErr(err)

	log.Println("数据库连接成功! ")

	insertSql := "insert into `sys_go_dept` (deptno,dname,location)values (?,?,?) "
	rs, err := db.Exec(insertSql, 100000011, "销售总监", "北京市海淀区马连洼街道200号")
	checkErr(err)

	rowCount, err := rs.RowsAffected()
	checkErr(err)
	log.Printf("插入 %d 条数据", rowCount)
}

func checkErr(err error) {
	if err != nil {
		log.Fatal("系统异常: ", err.Error())
	}
}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database__1_.exe D:\program_file\go_workspace\org.jd.data\database\OOPMysqlToDatabaseInsertGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database__1_.exe
2023/10/18 19:47:03 数据库连接成功!
2023/10/18 19:47:03 插入 1 条数据

Process finished with the exit code 0

四: go修改数据


package main

import (
	"database/sql"
	// 注册驱动器 _下划线表示执行驱动中的init函数,不使用其他函数
	_ "github.com/go-sql-driver/mysql"
	"log"
)

func main() {
	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/tope-pay-user")
	updateCheckErr(err)

	// 延迟执行Closer()函数
	defer db.Close()

	// 验证连接的可用性
	err = db.Ping()
	updateCheckErr(err)

	log.Println("数据库连接成功! ")

	updateSql := "update `sys_go_dept` set dname=? , location=? where deptno =? "
	rs, err := db.Exec(updateSql, "CFO(首席财务官)", "北京市朝阳区三里屯大街2000号", 100000011)
	updateCheckErr(err)

	rowCount, err := rs.RowsAffected()
	updateCheckErr(err)

	if rowCount > 0 {
		log.Println("更新成功")
	}

}

func updateCheckErr(err error) {
	if err != nil {
		log.Fatal("系统异常: ", err.Error())
	}
}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database__2_.exe D:\program_file\go_workspace\org.jd.data\database\OOPMysqlToDatabaseQueryGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database__2_.exe
2023/10/18 20:31:26 数据库连接成功!
2023/10/18 20:31:27 更新成功

Process finished with the exit code 0
 

五: go查询数据


package main

import (
	"database/sql"
	// 注册驱动器 _下划线表示执行驱动中的init函数,不使用其他函数
	_ "github.com/go-sql-driver/mysql"
	"log"
)

func main() {
	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/tope-pay-user")
	queryCheckErr(err)

	// 延迟执行Closer()函数
	defer db.Close()

	// 验证连接的可用性
	err = db.Ping()
	queryCheckErr(err)

	log.Println("数据库连接成功! ")
	querySql := "select * from sys_go_dept where deptno = ?"

	rows, err := db.Query(querySql, 100000011)

	// 延迟执行
	defer rows.Close()

	for rows.Next() {
		user := User{}
		// 顺序需与数据库表的字段对应
		err := rows.Scan(&user.deptid, &user.deptno, &user.dname, &user.location)
		queryCheckErr(err)
		log.Println(user)
	}

}

type User struct {
	deptid   int64
	deptno   int64
	dname    string
	location string
}

func queryCheckErr(err error) {
	if err != nil {
		log.Fatal("系统异常: ", err.Error())
	}
}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database__2_.exe D:\program_file\go_workspace\org.jd.data\database\OOPMysqlToDatabaseQueryGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database__2_.exe
2023/10/18 20:54:42 数据库连接成功!
2023/10/18 20:54:42 {1 100000011 CFO(首席财务官) 北京市朝阳区三里屯大街2000号}
2023/10/18 20:54:42 {2 100000011 CFO(首席财务官) 北京市朝阳区三里屯大街2000号}
2023/10/18 20:54:42 {3 100000011 销售 北京市海淀区马连洼街道200号}

Process finished with the exit code 0
 


 

六: go删除数据

package main

import (
	"database/sql"
	// 注册驱动器 _下划线表示执行驱动中的init函数,不使用其他函数
	_ "github.com/go-sql-driver/mysql"
	"log"
)

func main() {
	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/tope-pay-user")
	deleteCheckErr(err)

	// 延迟执行Closer()函数
	defer db.Close()

	// 验证连接的可用性
	err = db.Ping()
	deleteCheckErr(err)

	log.Println("数据库连接成功! ")

	deleteSql := "delete from `sys_go_dept` where deptid = ? "
	rs, err := db.Exec(deleteSql, 3)
	deleteCheckErr(err)

	rowCount, err := rs.RowsAffected()
	deleteCheckErr(err)

	if rowCount > 0 {
		log.Println("删除成功")
	}

}

func deleteCheckErr(err error) {
	if err != nil {
		log.Fatal("系统异常: ", err.Error())
	}
}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database__5_.exe D:\program_file\go_workspace\org.jd.data\database\OOPMysqlToDatabaseDeleteGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_org_jd_data_org_jd_data_database__5_.exe
2023/10/18 21:02:56 数据库连接成功! 
2023/10/18 21:02:56 删除成功

Process finished with the exit code 0

七: go批量插入数据 


package main

import (
	"database/sql"
	"fmt"
	"log"

	// 注册驱动器 _下划线表示执行驱动中的init函数,不使用其他函数
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/tope-pay-user")
	batchInsertCheckErr(err)

	// 延迟执行Closer()函数
	defer db.Close()

	// 验证连接的可用性
	err = db.Ping()
	batchInsertCheckErr(err)
	sqlStr, params := insertDataMap()
	log.Println("数据库连接成功! ")
	res, _ := db.Exec(sqlStr, params...) // params...: 解构
	id, _ := res.LastInsertId()
	fmt.Printf("lastId: %d insert success!", id)

}

// 插入多条数据
func insertDataMap() (string, []interface{}) {
	data := []map[string]string{
		{"deptno": "100000011", "dname": "CTO首席技术官", "location": "北京市朝阳区三里屯大街20003号"},
		{"deptno": "100000022", "dname": "CTO首席技术官", "location": "北京市海淀区马连洼30003路"},
		{"deptno": "100000033", "dname": "CEO总经理", "location": "北京市昌平区龙泽苑街道200000"},
	}
	batchInsertSql := "insert into `sys_go_dept` (deptno,dname,location)values "
	var values []interface{}
	for index, row := range data {
		if index == len(data)-1 {
			batchInsertSql += "(?, ?, ?)"
		} else {
			batchInsertSql += "(?, ?, ?), "
		}
		values = append(values, row["deptno"], row["dname"], row["location"])
	}

	fmt.Println("batchInsertSql:", batchInsertSql)
	fmt.Println("values: ", values)
	return batchInsertSql, values
}

func batchInsertCheckErr(err error) {
	if err != nil {
		log.Fatal("系统异常: ", err.Error())
	}
}

运行效果:


GOROOT=D:\program_file_worker\go1.20 #gosetup
GOPATH=D:\program_file_worker\go1.20\bin;C:\Users\Administrator\go #gosetup
D:\program_file_worker\go1.20\bin\go.exe build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___2go_build_org_jd_data_org_jd_data_database__3_.exe D:\program_file\go_workspace\org.jd.data\database\OOPMysqlToDatabaseBatchInsertGrammar.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___2go_build_org_jd_data_org_jd_data_database__3_.exe
batchInsertSql: insert into `sys_go_dept` (deptno,dname,location)values (?, ?, ?), (?, ?, ?), (?, ?, ?)
values:  [100000011 CTO首席技术官 北京市朝阳区三里屯大街20003号 100000022 CTO首席技术官 北京市海淀区马连洼30003路 100000033 CEO总经理 北京市昌平区龙泽苑街道200000]
2023/10/18 21:24:20 数据库连接成功!
lastId: 9 insert success!

Process finished with the exit code 0




Go操作Mysql驱动实现CRUD完整文档




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1108097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑白棋(Othello, ACM/ICPC World Finals 1992, UVa220)rust解法

你的任务是模拟黑白棋游戏的进程。黑白棋的规则为:黑白双方轮流放棋子,每次必须让新放的棋子“夹住”至少一枚对方棋子,然后把所有被新放棋子“夹住”的对方棋子替换成己方棋子。一段连续(横、竖或者斜向)的同色棋子被…

【黑马程序员】MySQL学习记录二(SQL)案例

案例1(数据类型、DDL、DML、DQL) 根据需求创建表(设计合理的数据类型、长度) 1、设计一张员工信息表,要求如下 create table emp( id INT COMMENT 编号, workno VARCHAR(10) COMMENT 员工工号, name VARCHAR(10) COM…

企业工厂车间台式电脑经常有静电导致开不开机,如何彻底解决?

环境: HP 480G7 Win10 专业版 问题描述: 企业工厂车间台式电脑经常有静电导致开不开机,如何彻底解决? 开机电源指示灯闪,显示器黑屏没有画面开不了机,一般是把主机电源断了,把主机盖打开 把内存条拔了之后长按开机按键10秒以上然后插上内存条开机正常 相对与有些岗…

智慧应急三维电子沙盘系统

1 概述 深圳易图讯科技有限公司(www.3dgis.top)采用大数据、云计算、虚拟现实、物联网、AI等先进技术为支撑,以6博硕团队为核心,研发了智慧应急三维电子沙盘系统,成功案例100。该系统支持高清卫星影像、DEM高程数据、…

vue-pdf多页预览异常,Rendering cancelled, page 1 Error at BaseExceptionClosure xxx

项目开发使用vue-pdf,单页情况预览正常,多页vue-pdf预览异常,第一次预览时,会先弹出异常模态窗口,关闭模态窗口,pdf又是正常显示,报错信息及异常截图如下: 报错信息 Rendering cancelled, page…

使用Vue组件的watch监听-简单计算器

Vue组件的初探 一、浅析 这里做了一个全局的组件vue.component(mycomp,{}) 在<template></template>中写组件&#xff0c;将idcomp1 script中直接template:"#copm1" 其他的部分就是之前所讲的watch来实现简易计算器差不多 <div id"app"&…

6.5 Elasticsearch(五)Spring Data Elasticsearch - 增删改查API

文章目录 1.Spring Data Elasticsearch2.案例准备2.1 在 Elasticsearch 中创建 students 索引2.2 案例测试说明 3.创建项目3.1 新建工程3.2 新建 springboot module&#xff0c;添加 spring data elasticsearch 依赖3.3 pom.xml 文件3.4 application.yml 配置 4.Student 实体类…

SD卡与emmc的异同

eMMC与SD卡的异同&#xff1a; 物理尺寸和接口&#xff1a; eMMC&#xff1a;eMMC是一种嵌入式存储解决方案&#xff0c;通常采用BGA&#xff08;Ball Grid Array&#xff09;封装&#xff0c;焊接在电路板上。它没有标准的物理尺寸&#xff0c;而是以芯片的形式存在。SD卡&…

代理模式(初学)

代理模式 一、什么是代理模式 代理模式&#xff1a;为其他对象提供一种代理以控制对这个对象的访问 二、简单例子 这里面的骏骏就起到了代理的身份&#xff0c;而贵贵则是被代理的身份。 三、代码实现 1、用一个接口&#xff08;GivingGifts&#xff09;来保存送礼物的动作…

链表的概念+MySingleList的实现

文章目录 链表一、 链表的概念1.概念2. 结构 二、MySingleList的实现1 .定义内部类2 .创建链表3. 遍历链表并打印4.查找单链表中是否包含关键字key5.得到链表的长度6.头插法7. 尾插法8.任意位置插入8.删除结点清空 链表 顺序存储&#xff1a;顺序表/ArrayList 优点&#xff1…

Android平台GB28181设备接入模块之SmartGBD

大牛直播SDK研发的Android平台GB28181设备接入SDK&#xff08;SmartGBD&#xff09;&#xff0c;可实现不具备国标音视频能力的 Android终端&#xff0c;通过平台注册接入到现有的GB/T28181—2016服务&#xff0c;可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育…

C#插入排序算法

插入排序实现原理 插入排序算法是一种简单、直观的排序算法&#xff0c;其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。 具体实现步骤如下 首先咱们假设数组长度为n&#xff0c;从第二个元素开始&#xff0c;将当前元素存储在临时变量temp中。 从当前元素的前一…

【量化交易笔记】9.量化投资理论及一般流程

前言 在第7篇文章中指出&#xff0c;量化交易的主要有两方面应用&#xff0c;基于的数据主要是两个类型&#xff0c;如前面讲的用之前的数据预测股价&#xff0c;这类数据我们可归为纵向研究数据&#xff0c;又称时间序列数据&#xff0c;另一类是横截面数据&#xff0c;以称截…

CleanMyMac X2024免费版苹果电脑杀毒工具

在过去&#xff0c;人们普遍认为苹果电脑不容易受到恶意软件的攻击&#xff0c;因此不需要安装杀毒软件。然而&#xff0c;随着苹果电脑的普及和互联网的发展&#xff0c;苹果电脑也逐渐成为黑客和恶意软件的目标。为了保护苹果电脑的安全&#xff0c;使用一款可靠的苹果电脑杀…

通过SPI传输BMI160数据到nrf528xx

目录 主控和外设之间的联系关键示例可能的bug 主控和外设之间的联系 在完成代码之前&#xff0c;我们手里会有两份代码&#xff0c;一份是nrf528xx的SDK&#xff0c;一份是BMI160传感器的SDK&#xff0c;怎么利用SDK完成我们的需求呢&#xff1f;首先我们要搞明白&#xff0c;…

了解工业交换机背板带宽及其重要性

工业交换机是工业自动化领域中的关键设备&#xff0c;用于管理和控制工业网络中的数据流量。在设计和维护工业网络时&#xff0c;了解和优化工业交换机的性能至关重要。其中&#xff0c;背板带宽是一个重要的性能参数。 什么是工业交换机的背板带宽&#xff1f; 工业交换机的背…

Ubuntu系统如何进行网络连接-连接电脑局域网-物联网开发-Ubuntu系统维护

一、前言 在Ubuntu系统的维护中&#xff0c;我们常常需要对VMware中的Ubuntu虚拟机配置网络连接&#xff0c;以连接服务器下载或安装软件包以及进行网络通信等。 基于上述问题&#xff0c;本文将着重分享Ubuntu配置网络链接的若干方法。 二、网络连接模式 打开VM&#xff0c;右…

互联网Java工程师面试题·Java 总结篇·第八弹

目录 72、用 Java 的套接字编程实现一个多线程的回显&#xff08;echo&#xff09;服务器。 73、XML 文档定义有几种形式&#xff1f;它们之间有何本质区别&#xff1f;解析XML 文档有哪几种方式&#xff1f; 74、你在项目中哪些地方用到了 XML&#xff1f; 72、用 Java 的套…

初识RabbitMQ

大家好我是苏麟今天带来rabbitmq. RabbitMQ RabbitMQ官网 : RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ 初识MQ 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步…

Illustrator 2022 for mac (AI 2022中文版)

Illustrator 软件是一种应用于出版、多媒体和在线图像的工业标准矢量插画的软件。作为一款非常好的矢量图形处理工具&#xff0c;该软件主要应用于印刷出版、海报书籍排版、专业插画、多媒体图像处理和互联网页面的制作等&#xff0c;也可以为线稿提供较高的精度和控制&#xf…