使用 Golang 操作 MySQL

devtools/2025/3/15 0:27:36/

在Go语言中,操作SQL数据库,通常会用到一些第三方库来简化数据库的连接、查询和操作过程。其中原生的 database/sql + go-sql-driver/mysql 库更符合sql语句使用习惯。

安装

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

直接上代码来演示基本的创建,插入,更新,删除操作。

package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql"
)type Staff struct {id        intage       intname      stringemail     stringcreate_at string
}func main() {db, err := sql.Open("mysql", "zy:123456@tcp(localhost:3306)/company")if err != nil {panic(err)}defer db.Close()/* create table */createTableQuery := `CREATE TABLE IF NOT EXISTS department (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,email VARCHAR(100) NOT NULL,age INT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)`_, err = db.Exec(createTableQuery)if err != nil {panic(err)} else {fmt.Println("Table created successfully")}/* insert data */insertCmd := `INSERT INTO department (name, email, age) VALUES ("xiaoming", "xiaoming@email.com", 25)`if result, err := db.Exec(insertCmd); err != nil {panic(err)} else {if id, err := result.LastInsertId(); err != nil {panic(err)} else {fmt.Printf("insert id %d\n", id)}}/* query data */queryCmd := `SELECT * FROM department`rows, err := db.Query(queryCmd)if err != nil {panic(err)}defer rows.Close()for rows.Next() {var person Staffrows.Scan(&person.id, &person.name, &person.email, &person.age, &person.create_at)fmt.Printf("%v\n", person)}/* update data */updateCmd := `UPDATE department set age = 30 WHERE name = "xiaoming"`result, err := db.Exec(updateCmd)if err != nil {panic(err)} else {if affectId, err := result.RowsAffected(); err != nil {panic(err)} else {fmt.Printf("update success, rows count %d\n", affectId)}}/* delete */deleteCmd := `DELETE FROM department WHERE name = "xiaoming"`result, err = db.Exec(deleteCmd)if err != nil {panic(err)} else {if affectId, err := result.RowsAffected(); err != nil {panic(err)} else {fmt.Printf("delete success, rows count %d\n", affectId)}}
}


http://www.ppmy.cn/devtools/167154.html

相关文章

CODESYS RTE之安装及使用的注意事项

1、安装时的注意事项 安装的CODESYS RTE版本在3.5.20及以上时,选择Control RTE(下图红框),无论是运动控制还是点位控制均可,否则操作和使用时会很有苦难言。有咨询官方客服,本作者也曾受其困扰了一段时间。…

江科大51单片机笔记【14】LCD1602(上)

写在前言 此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识 在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…

OpenAI API模型ChatGPT各模型功能对比,o1、o1Pro、GPT-4o、GPT-4.5调用次数限制附ChatGPT订阅教程

本文包含OpenAI API模型对比页面以及ChatGPT各模型功能对比表 - 截至2025最新整理数据:包含模型分类及描述;调用次数限制; 包含模型的类型有: Chat 模型(如 GPT-4o、GPT-4.5、GPT-4)专注于对话&#xff0c…

BGP实验(二)—路由反射器

一、拓扑图 二、实验需求 实现BGP路由互联互通 三、实验思路 由于iBGP间存在水平分割机制,因此R4和R5学习到R1的路由 应用全互联方法可以使iBGP都学习到路由,但网络规模较大时,会增加路由负担。 因此使用反射器(相当于中转站&…

【每日学点HarmonyOS Next知识】自定义弹窗背景、状态管理V2实践、底部安全高度、OCR识别结果处理、Grid分割线

1、HarmonyOS promptAction在显示自定义弹窗的时候,底部会有一个固定宽度的白色底? 参考demo: import promptAction from ohos.promptAction Builder function HWUIToastBuilder() {Column() {Text(弹窗).fontSize(16).fontWeight(FontWeig…

数据结构(蓝桥杯常考点)

数据结构 前言:这个是针对于蓝桥杯竞赛常考的数据结构内容,基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中,时间复杂度不能超过10的7次方(1秒)到10的8次方(2秒) 空间限制&#x…

基于Python实现手写数字识别

KNN实验——手写数字识别 实验目的: 实验内容: 实现最基本的KNN算法,使用trainingDigits文件夹下的数据,对testDigits中的数据进行预测。(K赋值为1,使用欧氏距离,多数投票决定分类结果&#…

Win11+WSL2安装cuda11.8,Anaconda配置Pytorch2.4-GPU版本

1.WSL安装 首先安装WSL2,按照这个教程,目前我是安装到E盘 全网最全Win10/11系统下WSL2Ubuntu20.04的全流程安装指南(两种支持安装至 D 盘方式)_win10 wsl2安装-CSDN博客 2.CUDA安装 安装完之后,输入nvidia-smi&…