使用Go语言简单调用MySql

43 篇文章 1 订阅
30 篇文章 0 订阅

1.数据新增

简单演示使用Mysql向表格中添加个人信息

1.1数据库准备

  • 在MySQL中新建数据库名称first(名称不限,可自设)
  • 新建表(在此处添加了一个表格,记录了people的id、name、address)
create table people(
  id int primary key auto_increment,	//自动生成
  name varchar(20),
  address varchar(20)
)

1.2.代码实现

package main

import (
   "fmt"
   _ "github.com/go-sql-driver/mysql"		//驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前面添加_
   "database/sql"							//Golang中数据库操作包
)

func main() {
   /*
   第一个参数:连接什么数据库
   第二个参数:连接字符串
   语法:数据库登录用户名:密码@tcp(mysql主机ip:端口)/database名称
    */
   db,err:=sql.Open("mysql","root:root@tcp(localhost:3306)/first")
   db.Ping()
   //Error处理
   if err!=nil{
      fmt.Println("数据库连接失败")
   }
   //关闭连接
   defer func() {
      if db!=nil{
         db.Close()
      }
      fmt.Println("关闭连接")
   }()
   /*
      准备处理SQL语句
      支持占位符,防止SQL注入
    */
   stmt,err:=db.Prepare("insert into people values(default,?,?)")
   //错误处理
   if err!=nil{
      fmt.Println("预处理失败",err)
   }
   //关闭对象
   defer func() {
      if stmt!=nil{
         stmt.Close()
      }
   }()
   /*
   Exec() 参数为不定项参数,对应占位符?个数
    */
   res,err:=stmt.Exec("张三","海淀")
   //错误处理
   if err!=nil{
      fmt.Println("执行SQL出现错误")
   }
   //获取生成主键
   id,err:=res.LastInsertId()
   if err!=nil{
      fmt.Println("获取主键失败",err)
   }
   //受影响行数
   count,err:=res.RowsAffected()
   if err!=nil{
      fmt.Println("获取结果失败",err)
   }
   fmt.Println(id,count)
   if count>0{
      fmt.Println("新增成功")
   }else{
      fmt.Println("新增失败")
   }
}

在该部分值得注意的是在引入_ "github.com/go-sql-driver/mysql"时,可能会出现错误
直接在此处报错
报错信息为:

package goproxy.cn/go-sql-driver/mysql/...: unrecognized import path "goproxy.cn/go-sql-driver/mysql": reading https://goproxy.cn/go-sql-driver/mysql?go-get=1: 404 Not Found
	server response: not found

这个时候系统表示mysql驱动的地址找不到。
很大一部分原因是不能翻墙导致的。(可以翻墙的话应该没什么问题)
这个时候可以使用中国代理。
用快捷键⌘+R,输入cmd,打开命令符
用指令设置env proxy:

go env -w GOPROXY=https://goproxy.cn,direct

应该就可以正常使用了。
如果还是不行的话,打开网址:

https://codeload.github.com/go-sql-driver/mysql/zip/refs/heads/master

下载压缩包mysql-master
在GOPATH路径下打开src文件夹,
沿着路径

src\github.com\go-sql-driver\mysql

找到mysql文件夹,将下载好的mysql-master解压到mysql中。

2.数据修改

2.1. 修改注意点

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

2.2.代码实现

package main

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

func main() {
  db,err:=sql.Open("mysql","root:root@tcp(localhost:3306)/first")
   db.Ping()
   //Error处理
   if err!=nil{
      fmt.Println("数据库连接失败")
   }
   //关闭连接
   defer func() {
      if db!=nil{
         db.Close()
         fmt.Println("关闭连接")
      }
   }()
   /*
      准备处理SQL语句
      支持占位符,防止SQL注入
    */
   stmt,err:=db.Prepare("update people set name=?,address=? where id=?")
   //错误处理
   if err!=nil{
      fmt.Println("预处理失败",err)
   }
   //关闭对象
   defer func() {
      if stmt!=nil{
         stmt.Close()
         fmt.Println("stmt关闭")
      }
   }()
   /*
   Exec() 参数为不定项参数,对应占位符?个数
    */
   res,err:=stmt.Exec("李四","朝阳",1)
   //错误处理
   if err!=nil{
      fmt.Println("执行SQL出现错误")
   }
   //受影响行数
   count,err:=res.RowsAffected()
   if err!=nil{
      fmt.Println("获取结果失败",err)
   }
   if count>0{
      fmt.Println("修改成功")
   }else{
      fmt.Println("修改失败")
   }
}

3.数据删除

3.1.删除注意点

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

3.2.代码实现

package main

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

func main() {
   db,err:=sql.Open("mysql","root:root@tcp(localhost:3306)/first")
   db.Ping()
   //Error处理
   if err!=nil{
      fmt.Println("数据库连接失败")
   }
   //关闭连接
   defer func() {
      if db!=nil{
         db.Close()
         fmt.Println("关闭连接")
      }
   }()
   /*
      准备处理SQL语句
      支持占位符,防止SQL注入
    */
   stmt,err:=db.Prepare("delete from people where id=?")
   //错误处理
   if err!=nil{
      fmt.Println("预处理失败",err)
   }
   //关闭对象
   defer func() {
      if stmt!=nil{
         stmt.Close()
         fmt.Println("stmt关闭")
      }
   }()
   /*
   Exec() 参数为不定项参数,对应占位符?个数
    */
   res,err:=stmt.Exec(1)
   //错误处理
   if err!=nil{
      fmt.Println("执行SQL出现错误")
   }
   //受影响行数
   count,err:=res.RowsAffected()
   if err!=nil{
      fmt.Println("获取结果失败",err)
   }
   if count>0{
      fmt.Println("删除成功")
   }else{
      fmt.Println("删除失败")
   }
}

4.数据查询

4.1查询注意点

  • Golang中执行查询与新增、删除、修改中stmt的执行方法有区别,由于需要把查询到的结果取出来,所以还需要进行取值处理

4.2.代码示例

package main

import (
   "fmt"
   //驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前面添加_
   _ "github.com/go-sql-driver/mysql"
   //Golang中数据库操作包
   "database/sql"
)

func main() {
   /*
   第一个参数:连接什么数据库
   第二个参数:连接字符串
   语法:数据库登录用户名:密码@tcp(mysql主机ip:端口)/database名称
    */
   db,err:=sql.Open("mysql","root:root@tcp(localhost:3306)/first")
   db.Ping()
   //Error处理
   if err!=nil{
      fmt.Println("数据库连接失败")
   }
   //关闭连接
   defer func() {
      if db!=nil{
         db.Close()
         fmt.Println("关闭连接")
      }
   }()
   /*
      准备处理SQL语句
      支持占位符,防止SQL注入
    */
   stmt,err:=db.Prepare("select * from people")
   //错误处理
   if err!=nil{
      fmt.Println("预处理失败",err)
   }
   //关闭对象
   defer func() {
      if stmt!=nil{
         stmt.Close()
         fmt.Println("stmt关闭")
      }
   }()
   /*
   Exec() 参数为不定项参数,对应占位符?个数
    */
   rows,err:=stmt.Query()
   if err!=nil{
      fmt.Println("查询失败",err)
   }
   //循环遍历结果
   for rows.Next(){
      var id int
      var name,address string
      //把行内值付给变量
      rows.Scan(&id,&name,&address)
      fmt.Println(id,name,address)
   }
   defer func() {
      if rows!=nil{
         rows.Close()
         fmt.Println("关闭结果集")
      }
   }()
}

本文是我作为萌新在学习过程中做的学习笔记,很多代码来自尚学堂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值