go中mysql的使用

go中mysql的使用

1. 导入mysql驱动

mysql驱动,我们用对的最多的是github.com/go-sql-driver/mysql,一些很多框架的mysql驱动也是这个。

之所以要导入驱动,是因为golang里面,并没有实现mysql的各项功能,它只定义了一系列sql方便的接口,然后,你可以用mysql驱动去实现这个接口,间接的实现mysql的功能。如果你用的是mssql驱动去实现,那么就可以实现mssql的功能。

所以一般是这样导入mysql驱动:

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

前面这个_是咋回事?

当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用import _引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。

所以,第二个import就是不直接使用MySQL包,只是执行一下这个包的init函数,把mysql的驱动注册到sql包里,然后程序里就可以使用sql包来访问mysql数据库了。

这和前面那一篇关于接口的文章,也写了的。A实现了接口B,一般都会直接用B去调用相关的方法。所以,这里mysq也是的。渠道实现了sql的方法,我们直接去调用sql接口的方法接口,mysql驱动就不要去调用了。

2. 连接mysql

使用mysql的第一步是连接mysql服务器,连接mysql,用的是sql.Open(name, dsn)方法。

func GetDB() *sql.DB {
   
	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/ApiDB?charset=utf8") //第一个参数数驱动名
	if err != nil {
   
		panic(err.Error())
	}
	return db
}

其中Open函数的用法如下:

func Open(driverName, dataSourceName string) (*DB, error)

第一个参数,表示是驱动名字,我们填mysql,也可以填写其他的驱动,比如:sqlite3,postgres等。

第二个参数,是dsn,表示需要连接的数据源的服务器地址。可以有多种写法,你用一种自己常用的就行:

// 账号:密码@tcp(ip:端口)/数据库名字?charset=字符集
dsn := "root:123456@tcp(127.0.0.1:3306)/ApiDB?charset=utf8" 

3. 插入数据 (insert)

在说插入数据之前,我们先来构建一张表:

CREATE TABLE `userinfo` (
    `uid` INT(10) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(64) NULL DEFAULT NULL,
    `departname` VARCHAR(64) NULL DEFAULT NULL,
    `created` DATE NULL DEFAULT NULL,
    PRIMARY KEY (`uid`)
)

插入数据,有2种方式:

1.直接Exec执行:

result, err := db.Exec("INSERT INTO userinfo (username, departname, created) VALUES (?, ?, ?)","lisi","dev","2020-08-04")

2.先使用Prepare获得stmt,然后调用Exec执行插入。

smtp, err := db.Prepare("insert into userinfo set username=?, departname=?, created=?")
result2, err := smtp.Exec("zhangsan", "pro", time.Now().Format("2006-01-02"))

我们分别用这2种方式来写一下:

第一种:

func Add()  {
   
	//链接mysql
	db := GetDB()
	defer db.Close()

	//方法1, 插入数据
	result, err := db.Exec("insert into userinfo (username, departname, created)  VALUES (?, ?, ?)", "zhangsan", "dev", "2020-08-16")
	if err != nil {
   
		fmt.Println("insert err: ", err.Error())
	}
	//自增ID
	id, _ := result.LastInsertId()
	fmt.Println("id is :", id)
}

第二种方式:

func Add2()  {
   

	//链接mysql
	db := 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值