Go + MySQL的CRUD案例教程

banq發表於2021-06-12

在本教程中,我們將透過示例學習如何在 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)
}




 

相關文章