溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

go語言中mysql怎么使用

發(fā)布時(shí)間:2022-12-16 09:42:48 來源:億速云 閱讀:118 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“go語言中mysql怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

golang支持多種數(shù)據(jù)庫

1、MySQL

MySQL是一款關(guān)系型數(shù)據(jù)庫管理系統(tǒng),MySQL采用了雙授權(quán)政策,可以將數(shù)據(jù)保存在不同的表中,從而增加數(shù)據(jù)庫的速度和靈活性,具有體積小、速度快、總體擁有成本低的特點(diǎn)。

2、Oracle

oracle是一款關(guān)系數(shù)據(jù)庫管理系統(tǒng),在數(shù)據(jù)庫領(lǐng)域處于領(lǐng)先地位,領(lǐng)先地位具有可移植性好、使用方便、功能強(qiáng)的特點(diǎn),適用于各類大、中、小、微機(jī)環(huán)境,是一種效率高、可靠性好、吞吐量高的數(shù)據(jù)庫。

3、SQLite

SQLite是一款輕型數(shù)據(jù)庫,其遵循ACID關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其設(shè)計(jì)目的為嵌入式,所用可以在很多嵌入式產(chǎn)品中使用SQLite,同時(shí)可以和C#、PHP、Java等程序語言相結(jié)合使用。

4、MongoDB

MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,其目的是為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)方案,MongoDB支持的數(shù)據(jù)結(jié)構(gòu)非常松散,且支持多查詢語言和建立索引。

5、PostgreSQL

PostgreSQL是一個(gè)功能強(qiáng)大、源代碼開放的對(duì)象關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有復(fù)雜查詢、外鍵、觸發(fā)器、視圖、事務(wù)完整性、多版本并發(fā)控制等特性,PostgreSQL可以通過函數(shù)在數(shù)據(jù)庫服務(wù)器端執(zhí)行指令程序,且用戶可以自定義索引方法。

6、SQL Sever

SQL Sever是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有使用方便、可伸縮性好、相關(guān)軟件集成程度高的優(yōu)點(diǎn),可以提供更安全可靠的存儲(chǔ)性能,使用SQL Sever可以構(gòu)建和管理用于業(yè)務(wù)的高可用和高性能的數(shù)據(jù)應(yīng)用程序。

golang操作MySQL數(shù)據(jù)庫

下面主要從增刪查改以及事物等方面介紹go語言中mysql的使用

一、連接數(shù)據(jù)庫

使用sql.Open()函數(shù)打開數(shù)據(jù)庫連接,數(shù)據(jù)庫的連接字符串(dsn)格式如下:

admin:123456@tcp(10.2.1.5)/irisapp

代碼如下:

func (f *mysql_db) mysql_open() {
    db, err := sql.Open("mysql", dbusername+":"+dbpassword+"@tcp("+dbhostsip+")/"+dbname)
    if err != nil {
        fmt.Println("鏈接失敗")
    }
    fmt.Println("鏈接成功")
    f.db = db
}

二、插入

func (f *mysql_db) mysql_insert() { //insert  添加數(shù)據(jù)
    fmt.Println("開始插入")
    stmt, err := f.db.Prepare("INSERT INTO depart(departName,memo) VALUES(?,?)")
    //defer stmt.Close()
    if err != nil {
        fmt.Println("插入失敗")
        return
    }
    stmt.Exec("dd", "adadcccda")
    fmt.Println("插入成功")
}

三、查詢

func (f *mysql_db) mysql_select(sql_data string) {   //select 查詢數(shù)據(jù)
    fmt.Println("sql:", sql_data)
    rows, err := f.db.Query(sql_data)
    if err != nil {
        fmt.Println("查詢失敗")
    }
    for rows.Next() {
        var departID int
        var departName string
        var memo string
        err = rows.Scan(&departID, &departName, &memo)
        if err != nil {
            panic(err)
        }
        fmt.Println("departName:", departName)
    }
}

四、更新

func (f *mysql_db) mysql_update() { //update  修改數(shù)據(jù)
    stmt, err := f.db.Prepare("update depart set departName=?,memo =? where departId=?")
    //defer stmt.Close()
    if err != nil {
        //錯(cuò)誤處理
    }
    result,_ := stmt.Exec("aa","asdfadsadsfa",1)
    if result == nil {
        fmt.Println("修改失敗")
    }
    affect_count,_ := result.RowsAffected()    //返回影響的條數(shù),注意有兩個(gè)返回值
    fmt.Println("%v",affect_count)
}

五、刪除

func (f *mysql_db) mysql_delete() { //delete  刪除數(shù)據(jù)
    stmt, err := f.db.Prepare("delete from depart where departId=?")
    //defer stmt.Close()
    if err != nil {
        //錯(cuò)誤處理
    }
    stmt.Exec(2)     //不返回任何結(jié)果
    fmt.Println("刪除成功")
}

六、事物

func (f *mysql_db) mysql_tran(){
    //事務(wù)
    tx,err := f.db.Begin()        //聲明一個(gè)事務(wù)的開始
    if err != nil {
        fmt.Println(err)
        return
    }
    insert_sql := "insert into depart (departName,memo) VALUES(?,?)"
    insert_stmt,insert_err := tx.Prepare(insert_sql)
    if insert_err != nil {
        fmt.Println(insert_err)
        return
    }
    insert_res,insert_err := insert_stmt.Exec("ff","ff")
    last_insert_id,_ := insert_res.LastInsertId()
    fmt.Println(last_insert_id)
    // defer tx.Rollback()            //回滾之前上面的last_login_id是有的,但在回滾后該操作沒有被提交,被回滾了,所以上面打印的Last_login_id的這條數(shù)據(jù)是不存在與數(shù)據(jù)庫表中的
    tx.Commit()                        //這里提交了上面的操作,所以上面的執(zhí)行的sql 會(huì)在數(shù)據(jù)庫中產(chǎn)生一條數(shù)據(jù)
}

調(diào)用

func main() {
    db := &mysql_db{}
    db.mysql_open()
    db.mysql_insert()
    db.mysql_update()
    db.mysql_delete()
    db.mysql_tran()
    db.mysql_select("select departID,departName,memo from depart")
    db.mysql_close() //關(guān)閉
}

啟動(dòng)后輸出如下:

D:\Go_Path\go\src\mysqldemo>go run mysqldemo.go
鏈接成功
開始插入
插入成功
0
刪除成功
10
sql: select departID,departName,memo from depart
departName: aa
departName: dd
departName: dd
departName: dd
departName: dd
departName: dd
departName: ff
departName: dd
departName: ff

完整代碼

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    )

var (
    dbhostsip  = "10.2.1.5:3306"
    dbusername = "admin"
    dbpassword = "123456"
    dbname     = "irisapp"
)

type mysql_db struct {
    db *sql.DB
}

func (f *mysql_db) mysql_open() {
    db, err := sql.Open("mysql", dbusername+":"+dbpassword+"@tcp("+dbhostsip+")/"+dbname)
    if err != nil {
        fmt.Println("鏈接失敗")
    }
    fmt.Println("鏈接成功")
    f.db = db
}

func (f *mysql_db) mysql_close() {
    defer f.db.Close()
}

func (f *mysql_db) mysql_select(sql_data string) {   //select 查詢數(shù)據(jù)
    fmt.Println("sql:", sql_data)
    rows, err := f.db.Query(sql_data)
    if err != nil {
        fmt.Println("查詢失敗")
    }
    for rows.Next() {
        var departID int
        var departName string
        var memo string
        err = rows.Scan(&departID, &departName, &memo)
        if err != nil {
            panic(err)
        }
        fmt.Println("departName:", departName)
    }

}

func (f *mysql_db) mysql_insert() { //insert  添加數(shù)據(jù)
    fmt.Println("開始插入")
    stmt, err := f.db.Prepare("INSERT INTO depart(departName,memo) VALUES(?,?)")
    //defer stmt.Close()
    if err != nil {
        fmt.Println("插入失敗")
        return
    }
    stmt.Exec("dd", "adadcccda")
    fmt.Println("插入成功")
}

func (f *mysql_db) mysql_update() { //update  修改數(shù)據(jù)
    stmt, err := f.db.Prepare("update depart set departName=?,memo =? where departId=?")
    //defer stmt.Close()
    if err != nil {
        //錯(cuò)誤處理
    }
    result,_ := stmt.Exec("aa","asdfadsadsfa",1)
    if result == nil {
        fmt.Println("修改失敗")
    }
    affect_count,_ := result.RowsAffected()    //返回影響的條數(shù),注意有兩個(gè)返回值
    fmt.Println(affect_count)
}

func (f *mysql_db) mysql_delete() { //delete  刪除數(shù)據(jù)
    stmt, err := f.db.Prepare("delete from depart where departId=?")
    //defer stmt.Close()
    if err != nil {
        //錯(cuò)誤處理
    }
    stmt.Exec(2)     //不返回任何結(jié)果
    fmt.Println("刪除成功")
}

func (f *mysql_db) mysql_tran(){
    //事務(wù)
    tx,err := f.db.Begin()        //聲明一個(gè)事務(wù)的開始
    if err != nil {
        fmt.Println(err)
        return
    }
    insert_sql := "insert into depart (departName,memo) VALUES(?,?)"
    insert_stmt,insert_err := tx.Prepare(insert_sql)
    if insert_err != nil {
        fmt.Println(insert_err)
        return
    }
    insert_res,insert_err := insert_stmt.Exec("ff","ff")
    last_insert_id,_ := insert_res.LastInsertId()
    fmt.Println(last_insert_id)
    // defer tx.Rollback()            //回滾之前上面的last_login_id是有的,但在回滾后該操作沒有被提交,被回滾了,所以上面打印的Last_login_id的這條數(shù)據(jù)是不存在與數(shù)據(jù)庫表中的
    tx.Commit()                        //這里提交了上面的操作,所以上面的執(zhí)行的sql 會(huì)在數(shù)據(jù)庫中產(chǎn)生一條數(shù)據(jù)
}

func main() {
    db := &mysql_db{}
    db.mysql_open()
    db.mysql_insert()
    db.mysql_update()
    db.mysql_delete()
    db.mysql_tran()
    db.mysql_select("select departID,departName,memo from depart")
    db.mysql_close() //關(guān)閉

}

“go語言中mysql怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI