go连接mysql与增删改查功能的实现

配置mysql数据库驱动

1.驱动包简介

  • 驱动包:任何编程语言想要连接数据库必须由数据库生产厂商提供的统一数据库调用而开发的内容
  • golang的mysql驱动包可以在github中下载到。http://github.com/go-sql-driver/mysql

2.go get

  • go get命令可以远程下载指定内容,支持git
  • github要求下载内容必须通过git客户端,所以直接使用go get命令后会提示错误
  • 在命令行中运行命令,前提是已经安装好了git客户端

连接mysql实现数据新增

1.数据库准备

  • 在mysql中新建数据库名称first
  • 新建表代码:
    create table people(
    id int primary key auto_increment,
    name varchar(20),
    address varchar(20)
    )

2.golang准备

  • golang代码
    package main
    import(
    “database/sql”
    “fmt”
    //此处不要忘记导入驱动,前边加占位符,成为空导入
    _ “github.com/go-sql-driver/mysql”
    )
    func main(){
    //sql.Open并不会立即建立连接,它只是设置好连接的参数,真正的连接是在第一次执行数据库操作(如db.Ping()或db.Query())时建立的。defer语句确保了即使在发生错误的情况下,数据库连接和预处理语句也会被正确关闭。
    db,err := sql.Open(“mysql”,“用户名:密码@tcp(localhost:3306)/first”)
    defer func(){
    if db!=nil{
    db.Close()
    }
    }()
    db.Ping()
    if err!=nil{
    fmt.Println(“数据库连接失败”)
    return
    }
    //预处理sql
    //?表示占位符
    stmt,err := db.Prepare(“insert into people values(default,?,?)”)
    defer func(){
    if stmt!=nil{
    stmt.Close()
    }()
    if err!= nil{
    fmt.Println(“预处理失败”)
    return
    }
    //参数和占位符对应
    r,err := stmt.Exec(“张三”,“海淀”)
    if err!= nil{
    fmt.Println(“sql执行失败”)
    return
    }
    //获取结果
    count,err:=r.RowsAffected()
    if err!= nil{
    fmt.Println(“结果获取失败”)
    return
    }
    if count>0{
    fmt.Println(“新增成功”)
    }else{
    fmt.Println(“新增失败”)
    }
    }

连接mysql实现数据修改

1.修改注意点

  • 修改和新增类似,只是不需要获取lastinsertld()和SQL语句是修改语句
  • 在golang中要求,如果修改前和修改后的值相同,RowsAffected()返回0

2.代码实现

package main
import(
“fmt”
//驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前添加占位符
_“github.com/go-asl-driver/mysql”
//golang中数据库操作包
“database/sql”
)
func main(){
//打开连接
db,err := sql.Open(“mysql”,“用户名:密码@tcp(localhost:3306)/first”)
db.Ping()
defer func(){
if db!=nil{
db.Close()
}
}()
if err!=nil{
fmt.Println(“数据库连接失败”)
return
}
//预处理sql
//?表示占位符
stmt,err := db.Prepare(" update people set name=?,address=? where id =?")
defer func(){
if stmt!=nil{
stmt.Close()
}()
if err!= nil{
fmt.Println(“预处理失败”)
return
}
//参数和占位符对应
r,err := stmt.Exec(“李四”,“朝阳”,3)
if err!= nil{
fmt.Println(“sql执行失败”)
return
}
//获取结果
count,err:=r.RowsAffected()
if err!= nil{
fmt.Println(“结果获取失败”)
return
}
if count>0{
fmt.Println(“修改成功”)
}else{
fmt.Println(“修改失败”)
}
}

连接mysql实现数据删除

1.删除注意点

  • 删除和修改,新增结构一样,区别为SQL语句
  • 在go语言中要求如果要删除的数据不存在RowsAffected()返回0

2.代码实现

package main
import(
“fmt”
//驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前添加占位符
_“github.com/go-asl-driver/mysql”
//golang中数据库操作包
“database/sql”
)
func main(){
//打开连接
db,err := sql.Open(“mysql”,“用户名:密码@tcp(localhost:3306)/first”)
db.Ping()
defer func(){
if db!=nil{
db.Close()
}
}()
if err!=nil{
fmt.Println(“数据库连接失败”)
return
}
//预处理sql
//?表示占位符
stmt,err := db.Prepare(“delete from people where id =?”)
defer func(){
if stmt!=nil{
stmt.Close()
}()
if err!= nil{
fmt.Println(“预处理失败”)
return
}
//参数和占位符对应
r,err := stmt.Exec(3)
if err!= nil{
fmt.Println(“sql执行失败”)
return
}
//获取结果
count,err:=r.RowsAffected()
if err!= nil{
fmt.Println(“结果获取失败”)
return
}
if count>0{
fmt.Println(“删除成功”)
}else{
fmt.Println(“删除失败”)
}
}

连接mysql实现数据查询

1.查询注意点

  • golang中执行查询与新增,删除,修改中stmt的执行方法有区别,由于需要把查询到的结果取出来,所以还需要进行取值处理
  • 执行查询SQL时,stmt调用的是Query()方法

2.代码示例

package main
import(
“fmt”
//驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前添加占位符
_“github.com/go-asl-driver/mysql”
//golang中数据库操作包
“database/sql”
)
func main(){
//打开连接
db,err := sql.Open(“mysql”,“用户名:密码@tcp(localhost:3306)/first”)
db.Ping()
defer func(){
if db!=nil{
db.Close()
}
}()
if err!=nil{
fmt.Println(“数据库连接失败”)
return
}
//预处理sql
//?表示占位符
stmt,err := db.Prepare(“select * from people”)
defer func(){
if stmt!=nil{
stmt.Close()
}()
if err!= nil{
fmt.Println(“预处理失败”)
return
}
//获取结果
rows,err := stmt.Query()
defer func(){
if rows != nil{
row.Close()
}
}()
if err!= nil{
fmt.Println(“获取结果失败”)
return
}
for rows.Next(){
var id int
var name string
var address string
row.Scan(&id.&name,&address)
fmt.Println(id,name,address)
}

你可能感兴趣的:(golang,mysql,开发语言)