Go语言学习之操作MYSQL实现CRUD

yizhihongxing

Go语言学习之操作MYSQL实现CRUD

本文主要讲解如何使用Go语言操作MYSQL数据库实现CRUD(增加、查询、修改、删除)操作。

准备工作

在开始之前,需要先安装好Go语言开发环境以及MYSQL数据库,并且在Go语言项目中导入github.com/go-sql-driver/mysql驱动。

建立连接

使用Go语言连接MYSQL数据库需要用到database/sql包。下面是连接代码:

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)
func main() {
    db, err := sql.Open("mysql", "user:password@tcp(host:port)/database")
    if err != nil {
        fmt.Println(err)
    }
    defer db.Close()
}

其中,mysql为驱动名称,user为连接MYSQL数据库的用户名,password为连接MYSQL数据库的密码,host为MYSQL数据库的主机名,port为MYSQL数据库的端口号,database为MYSQL数据库名称。

增加数据

使用Go语言往MYSQL数据库中插入数据需要用到Exec函数。下面是增加数据代码:

func insertData(name string, age int) {
    sql := "INSERT INTO student(name,age) VALUES(?,?)"
    stm, err := db.Prepare(sql)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer stm.Close()
    res, err := stm.Exec(name, age)
    if err != nil {
        fmt.Println(err)
        return
    }
    rowsAffected, _ := res.RowsAffected()
    fmt.Printf("插入成功,影响行数:%d", rowsAffected)
}

其中,student为表名,name和age为列名,?为参数占位符,name和age为要插入的参数。

查询数据

使用Go语言从MYSQL数据库中查询数据需要用到Query函数。下面是查询数据代码:

func queryData() {
    sql := "SELECT * FROM student"
    rows, err := db.Query(sql)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer rows.Close()
    for rows.Next() {
        var id int
        var name string
        var age int
        err := rows.Scan(&id, &name, &age)
        if err != nil {
            fmt.Println(err)
            return
        }
        fmt.Printf("id=%d, name=%s, age=%d\n", id, name, age)
    }
}

其中,SELECT * FROM student为要查询的SQL语句,id、name和age为表中的列名,rows.Scan函数可以将查询结果扫描到变量中。

修改数据

使用Go语言修改MYSQL数据库中的数据需要用到Exec函数。下面是修改数据代码:

func updateData(name string, age int) {
    sql := "UPDATE student SET age=? WHERE name=?"
    stm, err := db.Prepare(sql)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer stm.Close()
    res, err := stm.Exec(age, name)
    if err != nil {
        fmt.Println(err)
        return
    }
    rowsAffected, _ := res.RowsAffected()
    fmt.Printf("更新成功,影响行数:%d", rowsAffected)
}

其中,UPDATE student SET age=? WHERE name=?为要执行的SQL语句,?为参数占位符。

删除数据

使用Go语言从MYSQL数据库中删除数据需要用到Exec函数。下面是删除数据代码:

func deleteData(name string) {
    sql := "DELETE FROM student WHERE name = ?"
    stm, err := db.Prepare(sql)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer stm.Close()
    res, err := stm.Exec(name)
    if err != nil {
        fmt.Println(err)
        return
    }
    rowsAffected, _ := res.RowsAffected()
    fmt.Printf("删除成功,影响行数:%d", rowsAffected)
}

其中,DELETE FROM student WHERE name=?为要执行的SQL语句,?为参数占位符。

示例说明

下面是一个完整的示例,演示了如何使用Go语言操作MYSQL数据库实现增加、查询、修改和删除数据:

package main
import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)
var db *sql.DB
func init() {
    connStr := "user:password@tcp(host:port)/database"
    var err error
    db, err = sql.Open("mysql", connStr)
    if err != nil {
        fmt.Println(err)
    }
}
func insertData(name string, age int) {
    sql := "INSERT INTO student(name,age) VALUES(?,?)"
    stm, err := db.Prepare(sql)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer stm.Close()
    res, err := stm.Exec(name, age)
    if err != nil {
        fmt.Println(err)
        return
    }
    rowsAffected, _ := res.RowsAffected()
    fmt.Printf("插入成功,影响行数:%d", rowsAffected)
}
func queryData() {
    sql := "SELECT * FROM student"
    rows, err := db.Query(sql)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer rows.Close()
    for rows.Next() {
        var id int
        var name string
        var age int
        err := rows.Scan(&id, &name, &age)
        if err != nil {
            fmt.Println(err)
            return
        }
        fmt.Printf("id=%d, name=%s, age=%d\n", id, name, age)
    }
}
func updateData(name string, age int) {
    sql := "UPDATE student SET age=? WHERE name=?"
    stm, err := db.Prepare(sql)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer stm.Close()
    res, err := stm.Exec(age, name)
    if err != nil {
        fmt.Println(err)
        return
    }
    rowsAffected, _ := res.RowsAffected()
    fmt.Printf("更新成功,影响行数:%d", rowsAffected)
}
func deleteData(name string) {
    sql := "DELETE FROM student WHERE name = ?"
    stm, err := db.Prepare(sql)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer stm.Close()
    res, err := stm.Exec(name)
    if err != nil {
        fmt.Println(err)
        return
    }
    rowsAffected, _ := res.RowsAffected()
    fmt.Printf("删除成功,影响行数:%d", rowsAffected)
}
func main() {
    insertData("Tom", 18)
    insertData("Jack", 19)
    insertData("David", 20)

    queryData()

    updateData("Tom", 20)

    queryData()

    deleteData("David")

    queryData()
}

运行该示例可以看到从MYSQL数据库中插入、查询、修改和删除数据的结果。

总结

本文主要讲解了如何使用Go语言操作MYSQL数据库实现CRUD(增加、查询、修改、删除)操作。首先需要建立连接,然后分别用到Exec和Query函数实现增加、查询、修改和删除数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Go语言学习之操作MYSQL实现CRUD - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • mysql数据库开发规范【推荐】

    MySQL数据库开发规范 为了确保我们的MySQL数据库开发工作高效、可维护、可扩展,我们需要制定MySQL开发规范。本文将详细介绍MySQL数据库的开发规范。 数据库设计 首先,我们需要设计合理的数据库结构。数据库设计是任何应用程序的基础,好的数据库结构使得数据表结构易于维护,有助于效率和可扩展性。 表名、列名使用小写和下划线 表名和列名必须是小写,并且单…

    database 2023年5月19日
    00
  • 5分钟教你docker安装启动redis全教程(全新方式)

    5分钟教你docker安装启动redis全教程(全新方式) 现如今,Docker已经被越来越多的人所熟知和使用。其优点在于不需要干涉操作系统,且容易进行迁移和升级。本文将介绍在Docker中安装和启动redis的几个关键步骤。 1. Elasticsearch Docker 镜像的获取 Elasticsearch Docker镜像仓库地址 你可以通过下面的d…

    database 2023年5月22日
    00
  • 排查Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl

    首先,”Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl”错误提示通常是由于应用程序与MySQL数据库连接的瞬间连接中断或数据库连接池中连接关闭导致的。 以下是排查”Failed to validate connection com.mysql.cj.jdbc.ConnectionI…

    database 2023年5月22日
    00
  • MySQL Select语句是如何执行的

    MySQL Select语句是一种用于从数据库中检索数据的SQL语句。它的执行过程包含以下几个步骤: ① 语法分析:MySQL会先对Select语句进行语法分析,确保它符合SQL的语法规范和要求。 ② 查询优化器:MySQL会对Select语句进行优化,以提高执行效率。它会决定执行策略、优化器的使用和数据源的选择等等。其中,优化器是一个重要的组件,它可以尝试…

    database 2023年5月22日
    00
  • springboot整合curator实现分布式锁过程

    下面我来详细讲解一下springboot整合curator实现分布式锁的完整攻略。 什么是分布式锁 在分布式系统中,为了避免多个节点同时修改同一个共享资源而导致的数据不一致的问题,需要使用分布式锁来同步对共享资源的访问。分布式锁的实现方式有很多种,其中基于zookeeper的curator是一种比较好用的分布式锁实现方法。 如何使用curator实现分布式锁…

    database 2023年5月21日
    00
  • sql语句创建外键关联的完整实例

    首先需要明确的是SQL语句中创建外键关联的完整过程包括创建外键和删除外键两个部分。 1. 创建外键 1.1 语法格式 ALTER TABLE child_table ADD CONSTRAINT constraint_name FOREIGN KEY(child_column1, child_column2, …) REFERENCES parent_t…

    database 2023年5月21日
    00
  • 详解MySQL数据库–多表查询–内连接,外连接,子查询,相关子查询

    我们来详细讲解一下“详解MySQL数据库–多表查询–内连接,外连接,子查询,相关子查询”的完整攻略。 多表查询 多表查询是指在数据查询时,涉及到多个数据表之间的关联查询操作。在MySQL数据库中,常用的多表查询方式包括内连接、外连接、子查询和相关子查询。 多表查询的作用是帮助我们在多个数据表之间找出适合的关联数据,从而更方便地查询我们需要的数据。 内连接…

    database 2023年5月22日
    00
  • Spark整合Mongodb的方法

    下面是详细的”Spark整合Mongodb的方法”攻略。 一、环境搭建 在本地环境或者云服务器上安装以下环境:- Spark集群- MongoDB Spark需要安装MongoDB的Java驱动程序,可以在以下网址中下载:https://mongodb.github.io/mongo-java-driver/。 二、使用Spark-shell与MongoDB…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部