golang操作mysql

五知小白羊 · · 572 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "strings"
)

// 定义要被查询的结构体
// 字段和数据库基本一致
type Email struct {
    Id int
    UserId string
    Email string
    Subscribe sql.NullInt64  // Subscribe 字段可能为null 所以使用sql.Null 开头的类型作为字段类型定义
}

func main() {
    // 数据库连接:  格式为: 用户名:密码@tcp(IP:端口)/库名?charset=utf8
    path := strings.Join([]string{"root", ":", "123", "@tcp(127.0.0.1:3306)/test?charset=utf8"}, "")
    db, err := sql.Open("mysql", path)
    if err != nil {
        fmt.Println("conn error: ", err)
    }

    db.SetConnMaxLifetime(10)  // 设置数据库最大连接数
    db.SetMaxOpenConns(10)  // 设置数据最大闲置
    
    // 普通插入方式
    //res, err := db.Exec("INSERT INTO emails(user_id, email) VALUES (11, 'abc@qq.com')")

    // 事务的方式来插入数据
    tx, err := db.Begin()
    ins, err := tx.Prepare("INSERT INTO emails(user_id, email) VALUES (?, ?)")
    res, err := ins.Exec(132, "yangzhaoss")
    fmt.Println()
    if err == nil {
        fmt.Println(res.LastInsertId())  // 获取自增id
    }else {
        fmt.Println(err)
    }

    // 删除操作
    del, err := tx.Prepare("DELETE FROM emails WHERE user_id = ?")
    if err == nil {
        res, err = del.Exec(132)
        tx.Commit()
    }else {
        fmt.Println(err)
    }

    // 查找操作
    // 单行查询 用QueryRow函数查询, 并且利用Scan将查询结果赋值到对应的对象中
    // 多行查询: 执行Query函数, 利用Next() 读取每一行返回的结果,并Scan赋值到相应的对象中。
    // 对于数据库中可能为Null的字段, 在结构体中设置字段类型为sql.Null 开头的对应类型
    rows, err := db.Query("select * from emails")
    var emails []Email
    if err == nil {
        for rows.Next() {
            var email Email
            err := rows.Scan(&email.Id, &email.UserId, &email.Email,&email.Subscribe)
            if err != nil {
                fmt.Println("Rows fail: ", err)
            }
            emails = append(emails, email)
        }
    // 对于可能为null的字段 要设置为 sql.Null 对应的字段
    }
    for _, v := range emails {
        fmt.Println(v.Id, v.UserId, v.Email, v.Subscribe)
    }
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:五知小白羊

查看原文:golang操作mysql

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

572 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传