golang mysql操作 go-sql-driver/mysql

本文详细介绍使用go-sql-driver/mysql库操作MySQL数据库的方法,包括连接、查询、插入、更新和删除等核心操作。通过实例演示了如何使用DB和Stmt类型执行SQL语句,以及如何处理查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

go操作mysql数据库,用的库是 go-sql-driver/mysql,安装直接go get

go get -u github.com/go-sql-driver/mysql

  • sql.DB

DB类型可用的函数有:

  1. Query(c string, args interface{} …) (*Rows, error),常用于SELECT语句
  2. Exec(c string, args interface{} …) (*Rows, error),常用与UPDATE和INSERT
  3. Prepare(c string) (*Stmt, error),其他语句,也可以用于执行上述语句,返回Stmt指针
  • sql.Stmt

Stmt是准备好的语句,可以执行数据库语句操作,常用函数有:

  1. Exec(args interface{} …) (Result, error),给定参数并执行准备好的语句,然后返回语句的总结果
//...
	stmt, err := db.Perpare("INSERT INTO User(user,pwd) VALUES (?, ?)")
	if err != nil {
		panic(err)
	}
	defer stmt.Close()
	_, err := stmt.Exec("laoli", "123456")
	if err != nil {
		panic(err)
	}
//...
//...
	stmt, err := db.Perpare("DELETE FROM User")
	if err != nil {
		panic(err)
	}
	defer stmt.Close()
	_, err := stmt.Exec()
	if err != nil {
		panic(err)
	}
  1. Query(args interface{} …) (*Rows, error),给定参数并执行准备好的语句,返回行结果,比方说SELECT操作就必须用这个函数调用
  • sql.Rows

Rows是sql语句执行返回的表,Rows会占用缓存,Rows.Next()里,如果返回false,则会自动释放缓存。
看一下源码:

// 源码
func (rs *Rows) Next() bool {
	var doClose, ok bool
	withLock(rs.closemu.RLocker(), func() {
		doClose, ok = rs.nextLocked()
	})
	if doClose {
		rs.Close() //在这里释放掉了
	}
	return ok
}

实战

例子:

package main

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

var db *sql.DB
func mian() {
	db = sql.Open("mysql", "root:123456@tcp(127.0.0.1)/test")
	if err := db.Ping(); err != nil {
		panic(err)
	}
}

func Insert() {
	_, err := db.Exec("INSERT INTO User(user, pwd) VALUE (?, ?)", "laowang", "123456")
	if err != nil {
		panic(err)
	}
}

func SelectRow() {
	rows, err := db.Query("SELECT * FROM User WHERE user=?", "laowang")
	if err != nil {
		panic(err)
	}
	//defer rows.Close() //如果后面代码没有循环调用rows.Next(),就需要手动在这里释放一下,不然会一直占用缓存
	var user string
	var pwd string
	for rows.Next() {
		row.Scan(&user, &pwd)
	}
	print(user, pwd)
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值