一、环境准备
在Go语言中连接MySQL数据库通常使用database/sql包配合一个MySQL驱动,比如github.com/go-sql-driver/mysql
安装github.com/go-sql-driver/mysql
go get github.com/go-sql-driver/mysql
二、连接及增删改查
package mainimport ("database/sql""fmt""log"_ "github.com/go-sql-driver/mysql"
)//连接数据库使用sql.open(),然后使用ping来测试数据库是否可用
func Connect_mysql () *sql.DB{// 数据库连接字符串 (DSN) 格式为: user:password@tcp(host:port)/dbname?charset=utf8mb4dsn := "root:root@tcp(127.0.0.1:3306)/go_study?charset=utf8mb4"db, err := sql.Open("mysql",dsn)if err!=nil {log.Println("mysql connect erro: ",err)return nil}if db.Ping()!=nil {log.Println("ping err :")return nil}fmt.Println("mysql connect success!")return db}//查询操作,使用Query,因为查询的数据会返回很多行,所以Query会返回一个sql.Rows的数据集
//为什么不使用Exec?因为exec返回的是一个result,通常是包含改变的位置信息。
func Select_(db *sql.DB) {select_sql := "select username,sex from user"rows ,er := db.Query(select_sql)if er!=nil {fmt.Println("查询失败:",er)}//查询结果的处理主要使用两个函数,rows.Next()遍历每条数据,rows.Scan()将每一条数据的信息输入进参数里面。for rows.Next(){// var id int// var emil stringvar username stringvar sex stringerro :=rows.Scan(&username,&sex) //一条数据有几个字段就要Scan几个参数进行接收if erro !=nil{fmt.Println("Rows scan err:",erro)break}fmt.Printf("username:%s sex : %s\n",username,sex)}
}
func main() {DB :=Connect_mysql()defer DB.Close()// 查询操作//插入insert_sql := "insert into user (username,sex,email) values(?,?,?)"_ , err := DB.Exec(insert_sql,"xrf","girl","110")if err !=nil {fmt.Println("插入数据失败:",err)}//查询Select_(DB)update := "update user set sex=? where username = ?"DB.Exec(update,"boy","xrf")fmt.Println("更改之后:")Select_(DB)del:= "delete from user where user_id = ?"DB.Exec(del,2)fmt.Println("删除:")Select_(DB)}