golang操作mysql

栏目: Go · 发布时间: 5年前

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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

微创新

微创新

德鲁•博迪、雅各布•戈登堡 / 钟莉婷 / 中信出版社 / 2014-4-5 / 42.00

好产品不一定要颠覆,微小改进就能让用户尖叫! 引爆创新领域的全新方法论 互联网时代行之有效的5大创新策略 创业者、产品经理必读的创新行动指南 《怪诞行为学》作者 丹•艾瑞里 《影响力》作者 罗伯特•西奥迪尼 全球50位最具影响力的商业思想家之一丹尼尔•平克 周鸿祎、黎万强、罗振宇、牛文文、张鹏 联袂重磅推荐 为什么iPod可以在众多mp3产品中......一起来看看 《微创新》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试