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)
 
}

  

posted @   专职  阅读(121)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示