Go + MySQL的CRUD案例教程


在本教程中,我们将通过示例学习如何在 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)
}