go数据操作-MySQL
1.快速入门
下载依赖
go get -u github.com/go-sql-driver/mysql
使用MySQL驱动
func Open(driverName, dataSourceName string) (*DB, error)
Open打开一个dirverName指定的数据库,dataSourceName指定数据源,一般至少包括数据库文件名和其它连接必要的信息。
import ("database/sql"_ "github.com/go-sql-driver/mysql"
)func main() {// DSN:Data Source Namedsn := "user:password@tcp(127.0.0.1:3306)/dbname"db, err := sql.Open("mysql", dsn)if err != nil {panic(err)}defer db.Close() // 注意这行代码要写在上面err判断的下面
}
SetMaxOpenConns
func (db *DB) SetMaxOpenConns(n int)
SetMaxOpenConns设置与数据库建立连接的最大数目。 如果n大于0且小于最大闲置连接数,会将最大闲置连接数减小到匹配最大开启连接数的限制。 如果n<=0,不会限制最大开启连接数,默认为0(无限制)。
SetMaxIdleConns
func (db *DB) SetMaxIdleConns(n int)
SetMaxIdleConns设置连接池中的最大闲置连接数。 如果n大于最大开启连接数,则新的最大闲置连接数会减小到匹配最大开启连接数的限制。 如果n<=0,不会保留闲置连接。
2.CRUD操作
2.1. Insert操作
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)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"`
}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database
}func main() {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 succ:", id)
}
2.2. Select操作
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)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"`
}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database
}func main() {var person []Personerr := Db.Select(&person, "select user_id, username, sex, email from person where user_id=?", 1)if err != nil {fmt.Println("exec failed, ", err)return}fmt.Println("select succ:", person)
}
2.3. Update操作
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)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"`
}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database
}func main() {res, err := Db.Exec("update person set username=? where user_id=?", "stu0003", 1)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)}
2.4. Delete操作
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)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"`
}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database
}func main() {/*_, err := Db.Exec("delete from person where user_id=?", 1)if err != nil {fmt.Println("exec failed, ", err)return}*/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)
}
3. MySQL事务
mysql事务特性:
1) 原子性2) 一致性3) 隔离性4) 持久性
golang MySQL事务应用:
1) import (“github.com/jmoiron/sqlx")2) Db.Begin() 开始事务3) Db.Commit() 提交事务4) Db.Rollback() 回滚事务
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx")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"`}var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql failed,", err)return}Db = database}func main() {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()}相关文章:
go数据操作-MySQL
1.快速入门 下载依赖 go get -u github.com/go-sql-driver/mysql使用MySQL驱动 func Open(driverName, dataSourceName string) (*DB, error)Open打开一个dirverName指定的数据库,dataSourceName指定数据源,一般至少包括数据库文件名和其它连接必要的…...
基于node.js和Vue3的医院挂号就诊住院信息管理系统
摘要: 随着信息技术的快速发展,医院挂号就诊住院信息管理系统的构建变得尤为重要。该系统旨在提供一个高效、便捷的医疗服务平台,以改善患者就医体验和提高医院工作效率。本系统基于Node.js后端技术和Vue3前端框架进行开发,利用其…...
Django如何调用机器学习模型进行预测
Django是一个流行的Python Web框架,它可以很方便地集成机器学习模型,进行预测和推理。我将介绍如何在Django项目中调用训练好的机器学习模型,并实现一个预测接口。 准备工作 首先我们需要一个训练好的机器学习模型。这里我们使用Scikit-Learn训练一个简单的线性回归模型作为示…...
Web3.0初探
Web3.0初探 一、互联网发展史二、什么是Web3.0?三、现在的发展方向(衍生出来的产品):四、目前问题五、Web3.0与元宇宙 一、互联网发展史 Web3.0也就是第三代互联网。最新版本的Web3.0是以太坊的创始合伙人Gavin Wood在2014年提出…...
在windows和Linux中的安装 boost 以及 安装 muduo 和 mysql
一、CMake安装 Ubuntu Linux 下安装和卸载cmake 3.28.2版本-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135960115?spm1001.2014.3001.5501二、安装boost boost官网:boost官网 我下载的boost版本: windows:boost_1_84_0.zipli…...
WPOpenSocial实现WordPress的QQ登录
个人建站不可避免的需要自己搭建用户数据库的问题,可用户却往往因为注册繁琐而放弃浏览您的网站,由此可见,一个社交账号一键登录方式尤为重要。选择适合您网站需求的社交插件,可以提升用户互动,增加社交分享࿰…...
关于我用AI编写了一个聊天机器人……(7)
此次更新为v1.3.4版本,更新内容:增加显示时间功能 代码如下: #include <bits/stdc.h> #include <ctime> using namespace std; string userInput; class VirtualRobot { public:void chat() {cout << "你好&#x…...
WebService的services.xml问题
WebService有多种实现方式,这里使用的是axis2 问题: 在本地开发,访问本地的http://localhost:8080/services/ims?wsdl,正常访问 但是打成jar包,不管是linux还是window启动,都访问不到,报错…...
永久删除 Elasticsearch 中的主节点
Elasticsearch 是一个开源分布式搜索和分析引擎,用于各种任务,例如全文搜索、日志分析和实时数据分析。 Elasticsearch 集群由一个或多个节点组成,每个节点可以具有多种角色,包括主节点(master node)、数据…...
从搜索引擎到答案引擎:LLM驱动的变革
在过去的几周里,我一直在思考和起草这篇文章,认为谷歌搜索正处于被颠覆的边缘,它实际上可能会影响 SEO 作为业务牵引渠道的可行性。 考虑到谷歌二十多年来的完全统治地位,以及任何竞争对手都完全无力削弱它,坦率地说&…...
IDEA如何进行远程Debug调试
背景: 使用docker进行CVE漏洞复现的时候,由于只能黑盒进行复现,并不能知道为什么会产生这个漏洞,以及漏洞的POC为什么要这么写,之前我都是通过本地debug来进行源码分析,后来搜了一下,发现可以进…...
故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab)
文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab) 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅...
C语言数据结构之二叉树
少年恃险若平地 独倚长剑凌清秋 🎥烟雨长虹,孤鹜齐飞的个人主页 🔥个人专栏 🎥前期回顾-栈和队列 期待小伙伴们的支持与关注!!! 目录 树的定义与判定 树的定义 树的判定 树的相关概念 树的运用…...
《HTML 简易速速上手小册》第1章:HTML 入门(2024 最新版)
文章目录 1.1 HTML 简介与历史(😉🌐👽踏上神奇的网页编程之旅)1.1.1 从过去到现在的华丽蜕变1.1.2 市场需求 —— HTML的黄金时代1.1.3 企业中的实际应用 —— 不只是个网页1.1.4 职业前景 —— 未来属于你 1.2 基本 H…...
笔记本电脑Win11重装系统教程
在笔记本电脑Win11操作过程中,用户如果遇到很严重的系统问题,就可以重新正常的Win11系统,快速解决Win11系统问题。但是,部分新手用户不知道不知道如何操作才能给Win11笔记本电脑重装系统?以下小编分享笔记本电脑Win11重…...
突破编程_C++_面试(基础知识(3))
面试题5:函数调用的过程 C 中函数的调用包含参数入栈、函数跳转、保护现场、回复现场等过程,重点过程如下: (1)将函数的参数压入栈中,从右至左压入。 (2)调用函数时,将当…...
AI的安全应答之道
作者:统信UOS技术团队 2023,随着各种大语言模型的爆发,整个AI生态正处于从决策式AI进化到生成式AI的进程中。各类AI模型和AI应用层出不穷,也随之带来了与AI相关的各类潜在风险。AI开发和使用过程中的风险防范和治理,成为了不可忽…...
【昕宝爸爸小模块】日志系列之什么是分布式日志系统
➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…...
如何在淘宝和Shopee上进行选品:策略和原则
在当今数字化时代,电商平台已经成为卖家们扩展业务和增加销售额的重要渠道。而在淘宝和Shopee这两个知名电商平台上进行选品时,卖家可以遵循一些相似的原则和策略,以确保他们的产品能够吸引目标客户并取得成功。本文将为您介绍一些在淘宝和Sh…...
C++/数据结构:二叉搜索树的实现与应用
目录 一、二叉搜索树简介 二、二叉搜索树的结构与实现 2.1二叉树的查找与插入 2.2二叉树的删除 2.3二叉搜索树的实现 2.3.1非递归实现 2.3.2递归实现 三、二叉搜索树的k模型和kv模型 一、二叉搜索树简介 二叉搜索树又称二叉排序树,它或者是一棵空树࿰…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
