go语言mysql入门之一(查询)

go语言mysql查询

1. sql依赖包的安装

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

2. 初始化

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

func main() {
  db, err := sql.Open("mysql", "user:password@/dbname?charset=utf8")
  //操作你的操作...
  defer db.Close()
}

3. 简单使用

3.1 表结构
CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `phone` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '手机号',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
3.2 声明返回结构体
type ResUser struct {
	Id        uint   `json:"id"`
	Name      string `json:"name"`
	Phone     string `json:"phone"`
	CreatedAt string `json:"created_at"`
}
3.2 连接数据库
db, err := sql.Open("mysql", "root:@/test?charset=utf8")
if err != nil {
	log.Printf("connect failed error info is  %v \n", err)
	return
}
defer db.Close()
3.3 查询单条记录
var u = ResUser{}
nsql := `select id ,name,phone,created_at from users where id = ? `
err = db.QueryRow(nsql, 4).Scan(&u.Id,&u.Name,&u.Phone,&u.CreatedAt)
if err != nil {
	log.Printf("query failed error info is  %v \n", err)
}
fmt.Printf("%+v\n",u) //{Id:5 Name:123 Phone:13912345678 CreatedAt:2018-11-08 09:43:11}

注意:这里的Scan 函数是根据查询字段的顺序返回的,需要做到一一对相应,否则可能会错乱

3.4 更改json输出
js,_ := json.Marshal(u)
fmt.Printf("%s\n",js) //{"id":5,"name":"123","phone":"13912345678","created_at":"2018-11-08 09:43:11"}

4. 多条记录查询

type ResUser struct {
	Id        uint   `json:"id"`
	Name      string `json:"name"`
	Phone     sql.NullString `json:"phone"`
	CreatedAt string `json:"created_at"`
}

db, err := sql.Open("mysql", "root:@/test?charset=utf8")
if err != nil {
	log.Printf("connect failed error info is  %v \n", err)
	return
}
defer db.Close()

var us []ResUser
var tu = ResUser{}
nsql := `select id ,name,phone,created_at from users where id > ? `
rows,err := db.Query(nsql,3)
if err != nil {
	log.Printf("query failed error info is  %v \n", err)
	return
}

for rows.Next() {
	err = rows.Scan(&tu.Id,&tu.Name,&tu.Phone,&tu.CreatedAt)
	if err != nil {
		log.Printf(err.Error())
		continue
	}
	if !tu.Phone.Valid {
		tu.Phone.String = ""
	}
	us = append(us,tu)
}

fmt.Printf("%+v\n",us)
fmt.Println()
js,_ := json.Marshal(us)
fmt.Printf("%s\n",js)

打印结果:
[{Id:4 Name:abc@126.com Phone:{String:13112345678 Valid:true} CreatedAt:2018-11-08 09:32:09} {Id:5 Name:123 Phone:{String:13912345678 Valid:true} CreatedAt:2018-11-08 09:43:11}]

[{“id”:4,“name”:“abc@126.com”,“phone”:{“String”:“13112345678”,“Valid”:true},“created_at”:“2018-11-08 09:32:09”},{“id”:5,“name”:“123”,“phone”:{“String”:“13912345678”,“Valid”:true},“created_at”:“2018-11-08 09:43:11”}]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值