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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- JavaScript骚操作之操作符
- Go 语言操作 MySQL 之 事务操作
- C# 数据操作系列 - 1. SQL基础操作
- Vim 跨行操作与 Ex 命令操作范围
- 并发环境下,先操作数据库还是先操作缓存?
- 关于HBase Shell基本操作的表操作示例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
MD5 加密
MD5 加密工具
UNIX 时间戳转换
UNIX 时间戳转换