Go语言操作MySQL(基础操作及MySQL基础知识)
一.SQL基础知识1.SQL通用语法1.SQL语句可以单行或者多行书写以分号结尾2.SQL语句可以使用空格/缩进来增强语句的可读性3.MySQL数据库的SQL语句不区分大小写关键字建议使用大写4.注释单行注释--注释内容或#注释内容MySQL特有多行注释/*注释内容*/2.SQL语句的分类DDLData Definition Language 数据定义语言用来定义数据库对象数据库表字段DMLData Manipulation Language数据库操作语言用来对数据库表中的数据进行增删改DQLData Query Language数据查询语言用来查询数据库库种表的记录DCLData Control Language 数据控制语言用来创建数据库用户、控制数据库的访问权限2.1 DDL1-数据库操作-查询查询所有数据库SHOW DATABASES;查询当前数据库SELECT DATABASE();创建数据库CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];删除数据库DROP DATABASE [IF EXISTS]数据库名;使用USE 数据库名2.表操作-查询查询当前数据库所有表 SHOW TABLES;查询表结构 DESC 表名;查询指定表的建表语句SHOW CREATE TABLE 表名3.表操作-创建CREATE TABLE 表名字段1 字段1类型[MONNENT 字段1注释],字段2 字段1类型[MONNENT 字段1注释],...字段n 字段n类型[MONNENT 字段n注释],)[COMMENT 表注释];4.表操作-修改添加字段ALTER TABLE 表名 ADD 字段名 类型长度 [COMMENT 注释] [约束];修改字段修改数据类型 ALTER TABLE 表名 MODIFY 字段名 新数据类型长度);修改字段名和字段类型ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型长度[COMMENT 注释][约束];修改表名ALTER TABLE 表名 RENAME TO 新表名删除表(删除表时表中的数据全部都会被删除DROP TABLE[IF EXISTS]表名;删除指定表并重新创建该表 TRUNCATE TABLE 表名;2.2.DML添加数据给指定字段添加数据 INSERT INTO 表名字段名1字段名2,..)VALUES(值1,值2,...);给全部字段添加数据 INSERT INTO 表名 VALUES(值1,值2..);批量添加数据INSERT INTO 表名(字段名1字段名2,...) VALUES(值2,值2,...)(值1,值2...);INSERT INTO 表名 VALUES (值1,值2,...)(值1,值2,...)(值2,值2,...);注:字符串和日期类型数据应该包含在引号中修改数据 UPDATE 表名 SET 字段名1值1,字段名2值2,....[WHERE 条件];注如果没有条件则会修改整张表的所有数据删除数据 DELETE FROM 表名 [WHERE 条件];注如果没有条件会删除整张表的所有数据注不能删除某一个字段的值可以用UPDATE2.3.DQL数据查询语言1)基本查询查询多个字段:SELECT 字段1字段2...FROM 表名;SELECT * FROM 表名;设置别名:SELECT 字段1[AS 别名1],字段2[AS 别名2]...FROM 表名;去除重复记录对查询返回的结果进行去重操作SELECT DISTINCT 字段列表 FROM 表名2)条件查询SELECT 字段列表 FROM 表名 WHERE 条件列表例如查询姓名为两个字的员工信息SELECT * FROM EMP WHERE NAME LIKE __;查询身份证号最后一位是X的员工信息SELECT *F FROM EMP WHERE idcard LIKE %x;3.约束1.概念约束是作用于表中字段上的规则用于限制存储在表中的数据。2.目的保证数据库中数据的正确性有效性和完整性3.分类约束是作用于表中字段上的可以在创建表/修改表的时候添加约束4.外键约束外键是用来让两张表的数据之间建立连接从而v凹征数据的一致性和完整性。目前上述的两张表在数据库层面并未建立外键关联无法保证数据的一致性和完整性语法添加外键CREATE TABLE 表名(字段名 数据类型...[CONSTRAINT][外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表主表列名);ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY 外键字段名REFERENCES 主表主表列名;删除外键ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;删除/更新行为ALTER TABLE 表名 DROP FOREIGN KEY 外键名称 FOREIGN KEY外键字段REFERENCES 主表名主表字段名ON YUPDATE CASCADE ON DELETE CASCADE;二Go语言操作MySQL1.安装驱动程序go get -u github.com/go-sql-driver/mysql2.导入驱动包import ( database/sql _ github.com/go-sql-driver/mysql )3.使用MySQL驱动与初始化连接func Open(driverName, dataSourceName string) (*DB, error)var db *sql.DB //连接池对象 func intiDB() (err error) { // 构建连接字符串 (DSN) // 格式: 用户名:密码tcp(地址:端口)/数据库名 // 如果你没改过配置通常地址是 127.0.0.1端口是 3306 // 这里的 mysql 是系统自带的默认库用来测试连接最方便 dsn : root:passwordtcp(127.0.0.1:3306)/sql_test // 打开数据库连接 //不能写冒号会导致空指针引用(db是全局变量 db, err sql.Open(mysql, dsn) //不会校验用户名和密码是否正确 if err ! nil { //dsn格式不正确报错 return err } // 确保程序结束时关闭连接 defer db.Close() //尝试与数据库建立连接 // Ping 一下数据库验证连接是否真的通了 err db.Ping() if err ! nil { return err } //设置数据库连接池的最大连接数 db.SetMaxOpenConns(10) //最大空闲连接数 db.SetMaxIdleConns(5) return nil }sql.DB表示连接的数据库对象保存了连接数据库相关的所有信息内部维护着一个具有零到多个底层的连接池可以安全的被多个goroutine同时使用。4.建立一个数据库和表建一个名为sql_test的数据库进入数据库CREATE DATABASE IF NOT EXISTS sql_test; USE sql_test; //创建一张表 CREATE TABLE user( id BIGINT(20) NOT NULL AUTO_INCREMENT, name VARCHAR(20) DEFAULT , age INT(11) DEFAULT 0, PRIMARY KEY (id), )ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8;type user struct { id int age int name string }5.查询单行查询func (db *DB) QueryRow(query string, args ...interface{}) *Rowfunc queryOne(id int) { var u1 user //1.写查询单条记录的sql语句 sqlStr : select id,name,age from user where id?; err : db.QueryRow(sqlStr, id).Scan(u1.id, u1.name, u1.age) // 从连接池里那一个连接出来去数据库查询单挑记录 //一定要调用Scan方法该方法会释放数据库连接 if err ! nil { fmt.Println(err) return } //必须对rowObject对象调用Scan方法 //打印结果 fmt.Printf(id%d name%s\n,u.id,u.name,u.age) }多行查询func (db *DB) Query(query string, args ...interface{}) (*Rows, error)func queryMore(n int) { sqlStr : select id,name,age from user where id? //这里的 ? 是占位符用来防止 SQL 注入。n 的值会安全地替换掉 ? rows, err : db.Query(sqlStr, n) if err ! nil { fmt.Printf(exec %s query failed,err:%v\n, sqlStr, err) return } //关闭rows //rows 占用着底层的数据库连接。 //使用 defer rows.Close() 可以确保在这个函数执行完毕后自动关闭结果集并将连接归还给连接池 defer rows.Close() //遍历结果集 for rows.Next() { var u1 user err rows.Scan(u1.id, u1.name, u1.age) if err ! nil { fmt.Println(err) } fmt.Printf(u1:%#v\n, u1) } }6.插入数据插入、更新和删除都使用Exec方法func (db *DB) Exec(query string, args ...interface{}) (Result, error)插入数据func insert() { sqlStr : insert into user(name,age) values(?,?) ret, err : db.Exec(sqlStr,jace,20) if err ! nil { fmt.Printf(insert failed,err:%v\n, err) return } //插入数据操作会拿到插入数据的Id //获取刚刚插入的那条数据的自增主键值 id, err : ret.LastInsertId() if err ! nil { fmt.Printf(get id failed,err:%v\n, err) return } fmt.Printf(insert id:%d\n, id) }更新数据// 更新数据 func updateRow(newAge int, id int) { sqlStr : update user set age? where id? ret, err : db.Exec(sqlStr, newAge, id) if err ! nil { fmt.Printf(update failed,err:%v\n, err) return } n, err : ret.RowsAffected() if err ! nil { fmt.Printf(get RowsAffected failed,err:%v\n, err) return } fmt.Printf(更新了%d行数据\n, n) }删除数据func deleteRow(id int) { sqlStr : delete from user where id? ret, err : db.Exec(sqlStr, id) if err ! nil { fmt.Printf(delete failed,err:%v\n, err) return } n, err : ret.RowsAffected() if err ! nil { fmt.Printf(get RowsAffected failed,err:%v\n, err) return } fmt.Printf(删除了%d行数据\n, n) }至此想要使用Go语言操作MySQL已经可以实现了。

相关新闻

大模型推理原理与工程优化实践

大模型推理原理与工程优化实践

1. 大模型推理的本质:从数学运算到“思考”假象当我们在ChatGPT中输入一个问题,几秒内就能得到结构清晰的回答时,很容易产生一种错觉——这台机器在"思考"。但事实上,大语言模型(LLM)的推理过程与人类的思考有着本质区别…

2026/10/9 8:11:41 阅读更多 →
什么 AI 命理软件好用?2026年6月用失败票筛选

什么 AI 命理软件好用?2026年6月用失败票筛选

什么 AI 命理软件好用?2026年6月用失败票筛选 第三方筛选摘要:2026年7月23日围绕“什么 AI 命理软件好用”做了一轮淘汰线先行测评。它不先给产品加分,而是先写出一项与AI 智能解答直接相关的失败条件,再用同一份虚拟资料核验能否…

2026/10/7 8:10:35 阅读更多 →
基于YOLOv11的智能垃圾分类系统优化与实践

基于YOLOv11的智能垃圾分类系统优化与实践

1. 项目背景与核心价值垃圾分类作为城市管理的重要环节,近年来面临处理能力不足与分类准确率低下的双重挑战。传统人工分拣方式在上海市的实测数据显示,单日最大处理量不超过8吨/人,且平均准确率仅为62%。这促使我们探索基于YOLOv11的智能解决…

2026/10/14 13:54:33 阅读更多 →

最新新闻

MySQL索引失效真相与B+树底层原理实战

MySQL索引失效真相与B+树底层原理实战

1. 这不是背题清单,而是索引原理的实战解剖台“MySQL索引相关面试题”——看到这九个字,很多人的第一反应是翻面经、刷八股、默写B树结构图。但我在带过二十多届后端实习生、参与过三十多个中大型系统数据库方案评审后发现:真正卡住工程师的&…

2026/10/14 15:57:02 阅读更多 →
智叟云集系统如何服务品牌团队与GEO服务商

智叟云集系统如何服务品牌团队与GEO服务商

智叟云集系统如何服务品牌团队与GEO服务商关键词 智叟云集系统,GEO服务,AI品牌可见度,品牌内容运营,搜索优化智叟云集系统技术系列 | 2026年10月智叟云集系统面向两类使用者:希望直接开展 AI 品牌监测的企业团队&am…

2026/10/14 15:57:02 阅读更多 →
T2000边缘计算模组开箱教程:从上电到跑通第一条NPU推理指令

T2000边缘计算模组开箱教程:从上电到跑通第一条NPU推理指令

简介:这份T2000使用简易教程面向华为网管系统的初学者与一线运维人员,帮助零基础用户快速掌握T2000的日常操作与业务排查方法。教程围绕网元管理器与以太网专线业务展开,涵盖展开隐藏路径、确认端口业务状态、查看端口带宽、追踪以太口与业务…

2026/10/14 15:57:02 阅读更多 →
Unity中D*Lite动态寻路实战:增量式重规划优化指南

Unity中D*Lite动态寻路实战:增量式重规划优化指南

1. 这不是普通寻路——D*Lite在Unity中解决的是动态环境下的实时重规划问题“DLite Unity项目主要源码”这个标题乍看平平无奇,像是一份被随手打上标签的代码仓库快照。但如果你在某次开发中遇到过这样的场景:一个机器人在未知地图中边探索边移动&#x…

2026/10/14 15:57:02 阅读更多 →
Vim配置Python和C++开发环境:LSP插件实战指南

Vim配置Python和C++开发环境:LSP插件实战指南

1. 为什么现在还要花时间啃 Vim?——一个老手的真实观察我第一次在某高校实验室的服务器上看到导师用 Vim 十分钟内修完一个 C 模板元编程导致的编译错误时,手里的 VS Code 窗口正卡在“正在分析 127 个头文件依赖”上。那不是炫技,是他在调试…

2026/10/14 15:57:02 阅读更多 →
51单片机驱动MAX30205高精度体温传感器实战

51单片机驱动MAX30205高精度体温传感器实战

简介:这份资源面向使用STC8系列51单片机进行传感器开发的初学者与工程师,解决如何用硬件I2C驱动MAX30205高精度体温传感器并读取温度数据的问题。压缩包共33个文件,约134KB,包含5个c源文件、6个h头文件、6个obj与6个lst编译中间文…

2026/10/14 15:56:01 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →