go mysql id为0,通过go操作MySQL

这是学习笔记的第 1733篇文章

一直要做MySQL方向的一些数据管理定制工作,go就是一个很不错的切入点,拖来拖去,决定还是从一些小的地方开始慢慢切入。

go和MySQL方向的直接切合点就是通过go来操作MySQL了。

有什么好的驱动呢?除了标准库的,目前我知道有两个。jmoiron和go-sql-driver。

对于评分控来说,一看star就能看出门道来。

ff5fb0ddd052cf12b7b36d147c0495a2.png

e92f8baed24c4904a9eda4012c957707.png

两者的协议不同,版本规模go-sql-driver略多一些,本次的初步对接是使用go-sql-driver来实现的,比较有意思的是,这个是go-sql-driver的一个logo,这只囊地鼠开始和海豚一起愉快的玩耍了。

dbebdc507b80f3c006af654ff16c622f.png

我们假设一个场景,在一个表里插入数据,然后根据键值查取相应的值。

创建的表为user,

mysql> create table user(id int not null primary key auto_increment,username varchar(30),password varchar(64));

Query OK, 0 rows affected (0.12 sec)

然后下载相应的驱动包。

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

使用如下的代码来完成初步的对接。

package main

import (

"database/sql"

_ "github.com/go-sql-driver/mysql"

"log"

)

func insert(db *sql.DB) {

stmt, err := db.Prepare("INSERT INTO user(username, password) VALUES(?, ?)")

defer stmt.Close()

if err != nil {

log.Println(err)

return

}

stmt.Exec("jeanron", "test100")

stmt.Exec("jianrong", "testabc")

}

func main() {

db, err := sql.Open("mysql", "root:test@tcp(127.0.0.1:3306)/testdb?charset=utf8")

log.Println(db)

if err != nil {

log.Fatalf("Open database error: %s\n", err)

}

defer db.Close()

err = db.Ping()

log.Println(err)

if err != nil {

log.Fatal(err)

}

insert(db)

rows, err := db.Query("select id, username from user where id = ?", 1)

if err != nil {

log.Println(err)

}

defer rows.Close()

var id int

var name string

for rows.Next() {

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

if err != nil {

log.Fatal(err)

}

log.Println(id, name)

}

err = rows.Err()

if err != nil {

log.Fatal(err)

}

}

其中数据库连接的方式是一个重点:

连接串使用如下的规则来建立连接:

用户名:密码@协议(地址:端口)/数据库?参数=参数值

对应的代码为:

db, err := sql.Open("mysql", "root:xxxx@tcp(127.0.0.1:3306)/testdb?charset=utf8")

为了跟进执行过程中的日志细节,我加了几个debug的日志打印,可以看到整个执行的流程情况。

脚本执行的结果如下:

# go run test.go

2018/09/03 23:49:05 &{{root:jjmatch@tcp(127.0.0.1:3306)/testdb?charset=utf8 0x745188} 0 {0 0} [] map[] 0 0 0xc420070120 0xc420064060 false map[] map[] 0 0 0 0x4aeea0}

2018/09/03 23:49:05

2018/09/03 23:49:05 1 jeanron

通过这样一段简短的代码,可以很快的掌握go语言的特性,如果对Java和Python比较熟悉,写起来就很快了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值