Go + MySQL的CRUD案例教程

21-06-12 banq

在本教程中,我们将通过示例学习如何在 Golang 中创建、读取、更新和删除 MySQL 数据库中的记录。

先决条件

  • 安装 MySQL 服务器
  • 安装Go
  • 安装 MySQL 工作台

所需的包

要连接到 MySQL,我们需要一个驱动程序。这是我们将要使用的驱动程序。

要将其安装到 GOPATH 中,我们只需运行以下命令:

create database demo

创建数据库后,使用下面的 SQL 脚本在数据库中创建一个Students表:

CREATE TABLE `students` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `email` varchar(255) DEFAULT NULL,
  `first_name` varchar(255) DEFAULT NULL,
  `last_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) 

Golang - MySQL 插入数据库

在本例中,我们将在学生 表中插入一条记录 。

让我们创建一个名为“insert_db.go”的文件,并在其中添加以下内容:

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

func main() {

    db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/demo")
    defer db.Close()

    if err != nil {
        log.Fatal(err)
    }

    sql := "INSERT INTO students(email, first_name, last_name) VALUES ('admin@gmail.com', 'admin','admin')"
            
    res, err := db.Exec(sql)

    if err != nil {
        panic(err.Error())
    }

    lastId, err := res.LastInsertId()

    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("The last inserted row id: %d\n", lastId)
}

输出:

G:\GoLang\examples>go run insert_db.go

运行上面的 Go 示例后,插入了一条学生记录,您可以使用上面的示例通过更改插入 SQL 查询中的学生详细信息来插入任意数量的记录。

  

检索数据:

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

type Student struct {
    Id         int
    Email       string
    First_Name string
    Last_Name string
}

func main() {

    db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/demo")
    defer db.Close()

    if err != nil {
        log.Fatal(err)
    }

    res, err := db.Query("SELECT * FROM students")

    defer res.Close()

    if err != nil {
        log.Fatal(err)
    }

    for res.Next() {

        var student Student
        err := res.Scan(&student.Id, &student.Email, &student.First_Name, &student.Last_Name)

        if err != nil {
            log.Fatal(err)
        }

        fmt.Printf("%v\n", student)
    }
}
 

更新我们在学生 表的第一个例子中插入的第一条记录 

package main
 
import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)
 
type Student struct {
    Id         int
    Email       string
    First_Name string
    Last_Name string
}
 
func main() {
    db, e := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/demo")
    ErrorCheck(e)
 
    // close database after all work is done
    defer db.Close()
 
    PingDB(db)
 
    //Update db
    stmt, e := db.Prepare("update students set First_Name=? where id=?")
    ErrorCheck(e)
 
    // execute
    res, e := stmt.Exec("Ramesh", "1")
    ErrorCheck(e)
 
    a, e := res.RowsAffected()
    ErrorCheck(e)
 
    fmt.Println(a)
 
    
}
 
func ErrorCheck(err error) {
    if err != nil {
        panic(err.Error())
    }
}
 
func PingDB(db *sql.DB) {
    err := db.Ping()
    ErrorCheck(err)
}
 

删除学生 表中的第一条记录 :

package main
 
import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)
 
type Student struct {
    Id         int
    Email       string
    First_Name string
    Last_Name string
}
 
func main() {
    db, e := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/demo")
    ErrorCheck(e)
 
    // close database after all work is done
    defer db.Close()
 
    PingDB(db)
 
    // delete data
    stmt, e := db.Prepare("delete from students where id=?")
    ErrorCheck(e)
 
    // delete 1st student
    res, e := stmt.Exec("1")
    ErrorCheck(e)
 
    // affected rows
    a, e := res.RowsAffected()
    ErrorCheck(e)
 
    fmt.Println(a) // 1
}
 
func ErrorCheck(err error) {
    if err != nil {
        panic(err.Error())
    }
}
 
func PingDB(db *sql.DB) {
    err := db.Ping()
    ErrorCheck(err)
}

 

猜你喜欢