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/7/23 10:30:05 阅读更多 →
什么 AI 命理软件好用?2026年6月用失败票筛选

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

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

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

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

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

2026/7/23 10:30:05 阅读更多 →

最新新闻

OP(Over-Provisioning,过量配置)

OP(Over-Provisioning,过量配置)

📦 OP(Over-Provisioning,过量配置) 📌 什么是 OP? Over-Provisioning(过量配置) 是指 SSD 内部 实际 NAND 容量 > 对外标称容量 的那部分预留空间。 实际 NAND 总容量:256 GB 对外标称容量: 200 GB────────── OP 空间: 56 GB (约 28%)…

2026/7/23 14:49:06 阅读更多 →
B站视频标题优化实战:长尾关键词与情感化表达技巧

B站视频标题优化实战:长尾关键词与情感化表达技巧

1. 背景与核心概念 在当今内容创作蓬勃发展的时代,视频标题的优化已成为创作者吸引流量、提升曝光的关键环节。一个优秀的标题不仅要准确传达视频内容,更要符合平台算法推荐机制,从而在激烈的竞争中脱颖而出。本文将以B站(哔哩哔哩…

2026/7/23 14:49:06 阅读更多 →
燃气报警器物联网卡遇2G/3G基站退网 全新低功耗网络替换迁移方案

燃气报警器物联网卡遇2G/3G基站退网 全新低功耗网络替换迁移方案

运营商2G/3G退网,燃气安防设备迎来强制升级期 国内各大运营商已进入常态化2G、3G基站精简关停阶段,老旧低速网络逐步退出民用、安防物联网市场。对于遍布小区、商铺、餐饮门店的燃气报警器而言,这场网络迭代带来了实打实的设备运维危机。燃气…

2026/7/23 14:49:06 阅读更多 →
电商卖家修图效率低?这套AI电商修图工具组合拳,让你事半功倍

电商卖家修图效率低?这套AI电商修图工具组合拳,让你事半功倍

电商卖家修图效率低?这套AI电商修图工具组合拳,让你事半功倍 前言 你知道电商卖家每天花多少时间在修图上吗? 我之前认识一个做淘宝的哥们,每天上架新品,拍照1小时,修图3小时起步。 问他为什么不雇美工&…

2026/7/23 14:49:06 阅读更多 →
别再花冤枉钱买服务器了:应用托管如何让个人开发者0成本上线项目

别再花冤枉钱买服务器了:应用托管如何让个人开发者0成本上线项目

别再花冤枉钱买服务器了:应用托管如何让个人开发者0成本上线项目 做独立开发最扎心的是什么?代码写完了,项目跑不起来。你兴冲冲写了个小工具、做了个小网站,结果发现——没有服务器。 买服务器?阿里云最便宜的也要几十…

2026/7/23 14:49:06 阅读更多 →
2026山东本地央国企就业公司实测丨不同服务内容差异对比

2026山东本地央国企就业公司实测丨不同服务内容差异对比

2026届山东高校应届生规模预计突破85万,受就业环境影响,超6成应届生将央国企、军队文职作为求职首选,但从历年招考数据看,山东烟草、国家电网山东分公司、山东海洋集团等头部本地央国企校招通过率不足3%,多数考生折戟的…

2026/7/23 14:48:06 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻