golang操作mysql
1. 安装mysql驱动库和sqlx基于官方sql库的扩展库
go get github.com/go-sql-driver/mysql
go get github.com/jmoiron/sqlx
2. 链接mysql
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
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
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
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
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事务
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操作mysql的更多相关文章
- [转帖]golang操作mysql使用总结
golang操作mysql使用总结 https://www.cnblogs.com/hanyouchun/ 讲解的很详细~ 前言 Golang 提供了database/sql包用于对SQL数据库的访问 ...
- golang操作mysql数据库
golang操作mysql数据库 代码: mysql的增.删.改.查 package main import ( "database/sql" "fmt" &q ...
- golang操作mysql使用总结
前言 Golang 提供了database/sql包用于对SQL数据库的访问, 作为操作数据库的入口对象sql.DB, 主要为我们提供了两个重要的功能: sql.DB 通过数据库驱动为我们提供管理底层 ...
- Golang操作MySQL的正确姿势
封装原因: 查看了很多网上提供的ORM类型的数据库操作,觉得比较麻烦,需要提前配置很多的表结构体,然后才能使用,对于数据表很多的项目就配置起来就比较麻烦,所以对golang的mysql包进行了外层包装 ...
- Golang 操作mysql使用举例---连接本地数据库
连接数据库的方式有两种:TCP和Unix域socket. 本文使用Unix domain sockets连接数据库.关于TCP连接数据库可以参考Go 操作mysql使用举例 下面例子中,演示了使用sh ...
- Mysql学习(一)添加一个新的用户并用golang操作Mysql
Mysql添加一个新的用户并赋予权限 添加一个自己的用户到mysql 首先我们需要先用root用户登录mysql,但是刚安装完没有密码,我们先跳过密码 ailumiyana@ailumiyana:~/ ...
- go语言之行--golang操作redis、mysql大全
一.redis 简介 redis(REmote DIctionary Server)是一个由Salvatore Sanfilippo写key-value存储系统,它由C语言编写.遵守BSD协议.支持网 ...
- Go基础之--操作Mysql(一)
关于标准库database/sql database/sql是golang的标准库之一,它提供了一系列接口方法,用于访问关系数据库.它并不会提供数据库特有的方法,那些特有的方法交给数据库驱动去实现. ...
- Golang原生sql操作Mysql数据库增删改查
Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...
随机推荐
- tomcat启动报错There is insufficient memory for the Java Runtime Environment to continue
tomcat启动报错后显示以下错误 ## There is insufficient memory for the Java Runtime Environment to continue.# Nat ...
- 【LeetCode】214. Shortest Palindrome 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 前缀是否回文 判断前缀 相似题目 参考资料 日期 题 ...
- Lucky Substrings
而在26以内且属于fibonacci数列的数为1,2,3,5,8,13,21时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 A string s is LUCKY if ...
- MacOS使用Docker创建MySQL主从数据库
一.拉取MySQL镜像 通过终端获取最新的MySQL镜像 docker pull mysql/mysql-server 二.创建MySQL数据库容器配置文件对应目录 我们在当前用户下创建一组目录,用来 ...
- Redis 的 3 种集群方案对比
数据持久化 主从复制 自动故障恢复 集群化 数据持久化本质上是为了做数据备份,有了数据持久化,当Redis宕机时,我们可以把数据从磁盘上恢复回来,但在数据恢复之前,服务是不可用的,而且数据恢复的时间取 ...
- uniapp 兼容H5复制文本功能,亲测可用
封装copyText函数,具体如下: copyText(val){ let result // #ifndef H5 uni.setClipboardData({ data: val, success ...
- 标准基座获取定位可以获取address城市,自定义基座获取不到address
正常的返回应该 { "type": "WGS84", "altitude": 0, "latitude": 31.830 ...
- 使用docker-compose部署Kafka集群
之前写过Kafka集群的部署,不过那是基于宿主机的,地址:Kafka基础教程(二):Kafka安装 和Zookeeper一样,有时想简单的连接Kafka用一下,那就需要开好几台虚拟机,如果Zookee ...
- Swoole 中使用通道(Channel)实现协程间通讯(消息队列)
通道 Coroutine\Channel 使用本地内存,不同的进程之间内存是隔离的. 只能在同一进程的不同协程内进行 push 和 pop 操作. Co::set(['hook_flags'=> ...
- Shelll1-基础入门之变量
1.静态语言:编译型语言 强类型(变量) 事先转换成可执行格式 也就是先编译在执行 比如 C++.C. java C# 动态语言:解释性语言 弱类型 边解释边执行 比如PHP shell python ...