mysql中go什么_Go操作mysql

package main

import (

"database/sql"

_ "github.com/go-sql-driver/mysql"   //下载的mysql驱动

"fmt"

)

var db *sql.DB   //连接池

func initDB() (err error) {

dsn := "root:wyz@tcp(127.0.0.1:3306)/wang"

//导入了未使用,为什么能通过"mysql"字符串找到"github.com/go-sql-driver/mysql"?

//init()函数里,向"database/sql"注册了一个"mysql"驱动

db, err = sql.Open("mysql", dsn)

if err != nil{

return

}

err = db.Ping()

if err != nil {

return

}

//设置数据库连接池的最大连接数

db.SetMaxOpenConns(100)

//设置最大空闲连接数(没人用的时候会关闭一些连接)

db.SetMaxIdleConns(50)

return

}

type user struct {

id int64

name string

age int

}

// 查询单行记录

func queryRow(id int) *user {

var u1 user

//1.写查询条件查单条记录

sqlStr := `select id, name, age from user where id=?`

//2.执行并拿到结果,返回一行或者nil

//必须对rowObj对象调用Scan方法,因为该方法会归还数据库连接

db.QueryRow(sqlStr, id).Scan(&u1.id, &u1.name, &u1.age)

//返回结果

return &u1

}

// 查询多行记录

func queryRows(id int) {

sqlStr := "select id, name, age from user where id > ?"

rows, err := db.Query(sqlStr, id)

if err != nil {

fmt.Println("查询失败:", err)

return

}

// 非常重要:关闭rows释放持有的数据库链接

defer rows.Close()

// 循环读取结果集中的数据

for rows.Next() {

var u user

err := rows.Scan(&u.id, &u.name, &u.age)

if err != nil {

fmt.Printf("scan failed, err:%v\n", err)

return

}

fmt.Printf("id:%d name:%s age:%d\n", u.id, u.name, u.age)

}

}

// 插入数据

func insertRow() {

sqlStr := "insert into user(name, age) values (?,?)"

ret, err := db.Exec(sqlStr, "带头大哥", 38)  //ret用于获取插入那一行的ID

if err != nil {

fmt.Printf("插入数据失败:%v\n", err)

return

}

lastID, err := ret.LastInsertId()  // 新插入数据的id

if err != nil {

fmt.Printf("获取ID失败:%v\n", err)

return

}

fmt.Printf("插入数据成功ID:%d.\n", lastID)

}

// 更新数据

func updateRow() {

sqlStr := "update user set age=? where id = ?"

ret, err := db.Exec(sqlStr, 39, 4) // ret用于获取受影响的行数

if err != nil {

fmt.Printf("更新失败:%v\n", err)

return

}

n, err := ret.RowsAffected() // 操作影响的行数

if err != nil {

fmt.Printf("获取受影响行数失败:%v\n", err)

return

}

fmt.Printf("更新成功,影响行数:%d\n", n)

}

// 删除数据

func deleteRow() {

sqlStr := "delete from user where id = ?"

ret, err := db.Exec(sqlStr, 3)   // ret用于获取受影响的行数

if err != nil {

fmt.Printf("删除失败:%v\n", err)

return

}

n, err := ret.RowsAffected() // 操作影响的行数

if err != nil {

fmt.Printf("获取受影响行数失败:%v\n", err)

return

}

fmt.Printf("删除成功,影响行数:%d\n", n)

}

func main() {

err := initDB()

if err != nil {

fmt.Println("连接数据库成功")

}

u1 := queryRow(1)

fmt.Println(u1)

queryRows(1)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值