Golang原生sql操作Mysql資料庫增刪改查

OldBoy~發表於2018-09-22

Golang要操作mysql資料庫,首先需要在當期系統配置GOPATH,因為需要使用go get命令把驅動包下載到GOPATH下使用。

首先配置好你的GOPATH,執行以下命令,下載安裝mysql驅動,下載完成之後會在GOPATH下的src/github.com目錄下

go get -u github.com/go-sql-driver/mysql

然後本地的mysql服務要啟動,並建立一個表作為測試

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `age` tinyint(4) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

連線mysql資料庫命令

//mysql資料庫,使用者名稱:密碼@tcp連線:埠3306/test庫?字符集utf8
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8") //返回連線字元,和err

增刪改查程式碼(匯入mysql驅動包,並使用datebase/sql Open函式進行連線)

package main

import (
    "database/sql" // 這是一個抽象層包,比如區分mysql、orcal等資料庫,只有這個包是連線不上mysql的,還需要搭配下面的mysql包
       "fmt"
    _ "github.com/go-sql-driver/mysql" //匯入mysql驅動包
)

func init() {

}

func main() {
    db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
    if err != nil {
        panic(err)
    }
    //增加資料
        stmt, err := db.Prepare(`INSERT student (name,age) values (?,?)`)
        res, err := stmt.Exec("wangwu", 26)
        id, err := res.LastInsertId()
        fmt.Println("自增id=", id)
    //修改資料
        stmt, err := db.Prepare(`UPDATE student SET age=? WHERE id=?`)
        res, err := stmt.Exec(21, 5)
        num, err := res.RowsAffected() //影響行數
        fmt.Println(num)
    //刪除資料
        stmt, err := db.Prepare(`DELETE FROM student WHERE id=?`)
        res, err := stmt.Exec(5)
        num, err := res.RowsAffected()
        fmt.Println(num)
    //查詢資料
    rows, err := db.Query("SELECT * FROM student")

    //--------簡單一行一行輸出---start
    //    for rows.Next() { //滿足條件依次下一層
    //        var id int
    //        var name string
    //        var age int
    //        rows.Columns()

    //        err = rows.Scan(&id, &name, &age)
    //        fmt.Println(id)
    //        fmt.Println(name)
    //        fmt.Println(age)
    //    }
    //--------簡單一行一行輸出---end

    //--------遍歷放入map----start
    //構造scanArgs、values兩個陣列,scanArgs的每個值指向values相應值的地址
    columns, _ := rows.Columns()
    scanArgs := make([]interface{}, len(columns))
    values := make([]interface{}, len(columns))

    for i := range values {
        scanArgs[i] = &values[i]
    }

    for rows.Next() {
        //將行資料儲存到record字典
        err = rows.Scan(scanArgs...)
        record := make(map[string]string)
        for i, col := range values {
            if col != nil {
                record[columns[i]] = string(col.([]byte))
            }
        }
        fmt.Println(record)
    }
    //--------遍歷放入map----end
}

 

相關文章