go mysql

参考《go语言编程入门与实战技巧》

1.获取mysql驱动

目前使用比较多的是https://github.com/go-sql-driver/mysql,该驱动支持database/sql接口,支持keepalive,且当前维护较好。

使用该驱动首先需要将其clone到本地的gopath/src路径下。

以win10系统使用goland为例,查看gopath方式为file>>setting>>gopath

go mysql_第1张图片

打开该目录使用git clone下载驱动程序。

go mysql_第2张图片

2.引入mysql驱动

接下来就是在程序中引入该驱动,方式如下。

import (
	_ "mysql"
)

引入时前面要带下划线,因为这里只需要在引用包时调用包的init函数,在init里实现数据库驱动的注册,而不需要使用包里的函数和变量等资源。如果不加下划线,程序会报错,因为后面在使用时我们并没有使用mysql包里的任何资源。

引入包的几种方式可以参见Golang- import 导入包的几种方式:点,别名与下划线

3.测试

(1)数据表

(2)测试代码

package main

import (
	"database/sql"
	"fmt"
	_ "mysql"
)

func main() {
	db, err := sql.Open("mysql", "djq:lnx@/test?charset=utf8")
	check(err)

	//插入数据
	stmt, err := db.Prepare("insert userinfo set username=?, departname=?,created=?")
	check(err)
	res, err := stmt.Exec("hbliuu", "zebra English", "2019-11-04")
	check(err)
	id, err := res.LastInsertId()
	check(err)
	fmt.Println("id is: ", id)

	//更新数据
	stmt, err = db.Prepare("update userinfo set departname=? where username=?")
	check(err)
	res, err = stmt.Exec("toutiao", "jero")
	affect, err := res.RowsAffected()
	check(err)
	fmt.Println("affected row is: ", affect)

	//查询数据
	rows, err := db.Query("select * from userinfo")
	check(err)
	for rows.Next() {
		var uid int
		var username string
		var department string
		var created string
		err = rows.Scan(&uid, &username, &department, &created)
		check(err)
		fmt.Printf("uid: %d, username: %s, department: %s, created: %s\n", uid, username, department, created)
	}

	//删除数据
	stmt, err = db.Prepare("delete from userinfo where uid=?")
	check(err)
	res, err = stmt.Exec("1")
	check(err)
	affect, err = res.RowsAffected()
	check(err)
	fmt.Println("affected row is: ", affect)
	db.Close()
}

func check(err error) {
	if err != nil {
		panic(err)
	}
}

(3)测试结果

go mysql_第3张图片

注:uid设置了递增,之前产生过2,3但是被我删了,所以直接变成了4

你可能感兴趣的:(go,数据库)