Go连接mysql数据库,以及简单实现增删改查
前言:在看本章之前,需要安装了Mysql,同时也要Go的环境,这里我已经默认你都配置好了。目录安装依赖Go连接Mysql示例Go语言实现Mysql增删改查增样例代码:删样例代码:改样例代码:查样例代码:安装依赖Go语言官方没有实现Mysql的数据库驱动,database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。本文章实用的数据库驱动是Go MysqlDrive
前言:在看本章之前,需要安装了Mysql,同时也要Go的环境,这里我已经默认你都配置好了。
目录
安装依赖
Go语言官方没有实现Mysql的数据库驱动,database/sql
包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。本文章实用的数据库驱动是Go Mysql Driver。
安装依赖code:
go get -u github.com/go-sql-driver/mysql
Go连接Mysql示例
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
)
//Go连接Mysql示例
func main() {
//数据库
//用户名:密码啊@tcp(ip:端口)/数据库的名字
dsn := "root:123@tcp(127.0.0.1:3306)/test"
//连接数据集
db, err := sql.Open("mysql", dsn) //open不会检验用户名和密码
if err != nil {
fmt.Printf("dsn:%s invalid,err:%v\n", dsn, err)
return
}
err = db.Ping() //尝试连接数据库
if err != nil {
fmt.Printf("open %s faild,err:%v\n", dsn, err)
return
}
fmt.Println("连接数据库成功~")
}
运行后成功后会如下显示:
出现上面的图显示的连接数据库成功,就没问题~接下来对示例代码解析一下。
import 一次性导入三个包,其中 "database/sql"是操作sql数据库的官方接口。 _ "github.com/go-sql-driver/mysql"表示导入安装的依赖,Mysql数据库驱动,,前面加一个下划线,表示导入包但是不使用,相当于init()初始化。
dsn:连接Mysql的信息,格式是用户名:密码啊@tcp(ip:端口)/数据库的名字,例如:
dsn := "root:123@tcp(127.0.0.1:3306)/test"
用户:root,密码:123 ,连接Mysql 的IP地址:127.0.0.1 ,端口:3306 ,连接数据库的名字:test
Go语言实现Mysql增删改查
建表:实现增删改查,首先Mysq中得创建一个数据库,再得创建一个表。建表实例代码如下:
CREATE TABLE `user`(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT '',
`age` INT(11) DEFAULT '0',
PRIMARY KEY (`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
Mysql创建一个user表,里面有三个字段,id,那么,age,其中id作为主键,引擎是InnoDB。建表成功后如下
增样例代码:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
)
var db *sql.DB //连接池对象
func initDB() (err error) {
//数据库
//用户名:密码啊@tcp(ip:端口)/数据库的名字
dsn := "root:123@tcp(127.0.0.1:3306)/test"
//连接数据集
db, err = sql.Open("mysql", dsn) //open不会检验用户名和密码
if err != nil {
return
}
err = db.Ping() //尝试连接数据库
if err != nil {
return
}
fmt.Println("连接数据库成功~")
//设置数据库连接池的最大连接数
db.SetMaxIdleConns(10)
return
}
func insert() {
sqlStr := `insert into user(name,age) values("加油呀",28)`//sql语句
ret, err := db.Exec(sqlStr)//执行sql语句
if err != nil {
fmt.Printf("insert failed,err:%v\n", err)
return
}
//如果是插入数据的操作,能够拿到插入数据的id
id, err := ret.LastInsertId()
if err != nil {
fmt.Printf("get id failed,err:%v\n", err)
return
}
fmt.Println("id", id)
}
//Go连接Mysql示例
func main() {
err := initDB()
if err != nil {
fmt.Printf("init DB failed,err%v\n", err)
}
//插入数据
insert()
}
删样例代码:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
)
var db *sql.DB //连接池对象
func initDB() (err error) {
//数据库
//用户名:密码啊@tcp(ip:端口)/数据库的名字
dsn := "root:123@tcp(127.0.0.1:3306)/test"
//连接数据集
db, err = sql.Open("mysql", dsn) //open不会检验用户名和密码
if err != nil {
return
}
err = db.Ping() //尝试连接数据库
if err != nil {
return
}
fmt.Println("连接数据库成功~")
//设置数据库连接池的最大连接数
db.SetMaxIdleConns(10)
return
}
func deleteRow(id int) {
sqlStr := `delete from user where id=?`
ret, err := db.Exec(sqlStr, id)
if err != nil {
fmt.Printf("delete faild,err:%v\n", err)
return
}
n, _ := ret.RowsAffected()
fmt.Printf("删除了%d行数据\n", n)
}
//Go连接Mysql示例
func main() {
err := initDB()
if err != nil {
fmt.Printf("init DB failed,err%v\n", err)
}
//删除数据
deleteRow(1)
}
改样例代码:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
)
var db *sql.DB //连接池对象
func initDB() (err error) {
//数据库
//用户名:密码啊@tcp(ip:端口)/数据库的名字
dsn := "root:123@tcp(127.0.0.1:3306)/test"
//连接数据集
db, err = sql.Open("mysql", dsn) //open不会检验用户名和密码
if err != nil {
return
}
err = db.Ping() //尝试连接数据库
if err != nil {
return
}
fmt.Println("连接数据库成功~")
//设置数据库连接池的最大连接数
db.SetMaxIdleConns(10)
return
}
func updateRow(newAge int, id int) {
sqlStr := `update user set age=? where id=?`
ret, err := db.Exec(sqlStr, newAge, id)
if err != nil {
fmt.Printf("update failed ,err:%v\n", err)
return
}
n, _ := ret.RowsAffected()
fmt.Printf("更新了%d行数据\n", n)
}
//Go连接Mysql示例
func main() {
err := initDB()
if err != nil {
fmt.Printf("init DB failed,err%v\n", err)
}
//更新数据
updateRow(20, 1)
}
查样例代码:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" //导入包但不使用,init()
)
type user struct {
id int
name string
age int
}
var db *sql.DB //连接池对象
func initDB() (err error) {
//数据库
//用户名:密码啊@tcp(ip:端口)/数据库的名字
dsn := "root:123@tcp(127.0.0.1:3306)/test"
//连接数据集
db, err = sql.Open("mysql", dsn) //open不会检验用户名和密码
if err != nil {
return
}
err = db.Ping() //尝试连接数据库
if err != nil {
return
}
fmt.Println("连接数据库成功~")
//设置数据库连接池的最大连接数
db.SetMaxIdleConns(10)
return
}
func query(id int) {
//1.查询单挑记录的sql语句 ?是参数
sqlStr := "select id,name,age from user where id=?;"
//2.执行
rowObj := db.QueryRow(sqlStr, id) //从连接池里取一个连接出来去数据库查询单挑记录
//3.拿到结果
var u1 user
rowObj.Scan(&u1.id, &u1.name, &u1.age)
//打印结果
fmt.Printf("u1:%#v\n", u1)
}
func queryMore(n int) {
//1.sql语句
sqlStr := "select id,name,age from user where id >?;"
//2.执行
rows, err := db.Query(sqlStr, n)
if err != nil {
fmt.Printf("%s query failed,err:%v\n", sqlStr, err)
return
}
//3一定要关闭rows
defer rows.Close()
//4.循环取值
for rows.Next() {
var u1 user
rows.Scan(&u1.id, &u1.name, &u1.age)
fmt.Printf("u1:%#v\n", u1)
}
}
//Go连接Mysql示例
func main() {
err := initDB()
if err != nil {
fmt.Printf("init DB failed,err%v\n", err)
}
//查询单行
query(3)
//查询多行
queryMore(0)
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)