golang操作mysql
1. 安装mysql驱动库和sqlx基于官方sql库的扩展库
1 2 | go get github.com/ go -sql-driver/mysql go get github.com/jmoiron/sqlx |
2. 链接mysql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package main import ( "fmt" _ "github.com/go-sql-driver/mysql" // 初始化mysql驱动 "github.com/jmoiron/sqlx" // sqlx是一个库,为go标准库database/sql提供了一组扩展 ) var db *sqlx.DB func init() { // 初始化 database, err := sql.Open( "mysql" , "username:password@protocal(host:port)/db_name" ) if err != nil { fmt.Println( "open mysql field" , err) return } db = database } |
3. insert
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | func main() { defer db.Close() result, err := db.Exec( "insert into person(username, sex, email)values(?,?,?)" , "abc" , "男" , "myn_cn@163.com" ) if err != nil { fmt.Println( "Exec failed" , err) return } lastId, err := result.LastInsertId() if err != nil { fmt.Println( "exec failed" , err) return } fmt.Println( "insert success" , lastId) } |
4. select
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | type Person struct { Userid int `db: "user_id" ` Username string `db: "username" ` Sex string `db: "sex" ` Email string `db: "email" ` } func main() { defer db.Close() var person []Person if err := db.Select(&person, "select user_id, username, sex, email from person where user_id = ?;" , 2); err != nil { fmt.Println( "select failed" , err) return } fmt.Println( "select success" , person) } |
5. update
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | func main() { result, err := db.Exec( "update person set username = ? where user_id = ?" , "嘿嘿2" , 2) if err != nil { fmt.Println( "exec failed" , err) return } rows, err := result.RowsAffected() if err != nil { fmt.Println( "exec failed" , err) } fmt.Println( "update success" , rows) } |
6. delete
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | func main() { result, err := db.Exec( "delete from person where user_id = ?" , 2) if err != nil { fmt.Println( "exec failed" , err) return } rows, err := result.RowsAffected() if err != nil { fmt.Println( "exec failed" , err) } fmt.Println( "delete success" , rows) } |
7. mysql事务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | func main() { conn, err := db.Begin() // 开启事务 if err != nil { fmt.Println( "begin err" , err) return } result, err := conn.Exec( "insert into person(username, sex, email)values(?,?,?)" , "张三" , "女" , "1341935532@qq.com" ) if err != nil { fmt.Println( "exec failed" , err) conn.Rollback() // 回滚事务 return } rows, err := result.RowsAffected() if err != nil { fmt.Println( "exec failed" , err) conn.Rollback() // 回滚事务 return } conn.Commit() // 提交事务 fmt.Println( "delete success" , rows) } |
分类:
golang
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)