溫馨提示×

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

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

golang如何操作mysql數(shù)據(jù)

發(fā)布時(shí)間:2023-03-22 15:36:54 來(lái)源:億速云 閱讀:98 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“golang如何操作mysql數(shù)據(jù)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“golang如何操作mysql數(shù)據(jù)”吧!

什么是 MySQL

MySQL 是一種廣泛應(yīng)用于互聯(lián)網(wǎng)基礎(chǔ)設(shè)施中的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由 Oracle 公司贊助開(kāi)發(fā)。它支持多種操作系統(tǒng)和編程語(yǔ)言,包括 Go 語(yǔ)言,并且擁有一系列對(duì)于大型數(shù)據(jù)集成和高性能查詢支持良好的特性。

MySQL 的數(shù)據(jù)是基于表的,一行數(shù)據(jù)對(duì)應(yīng)一個(gè)記錄,一列數(shù)據(jù)對(duì)應(yīng)一個(gè)字段。它使用 SQL 語(yǔ)言對(duì)數(shù)據(jù)進(jìn)行操作,其中最常見(jiàn)的 SQL 操作包括 SELECT、INSERT、UPDATE、DELETE 和 CREATE TABLE。

Go 語(yǔ)言中的 MySQL 驅(qū)動(dòng)

在 Go 語(yǔ)言中,我們可以使用第三方 MySQL 驅(qū)動(dòng)程序來(lái)連接和查詢 MySQL 數(shù)據(jù)庫(kù)。但是,GO 語(yǔ)言標(biāo)準(zhǔn)庫(kù)中已經(jīng)包含了 database/sql 包,這個(gè)包已經(jīng)實(shí)現(xiàn)了標(biāo)準(zhǔn)的 SQL 數(shù)據(jù)庫(kù)接口,可以和其他方便的流行的 SQL 數(shù)據(jù)庫(kù)交互操作,包括 MySQL、PostgreSQL 和 SQLite 等。

因此,在我們開(kāi)始構(gòu)建查詢 MySQL 的 Go 應(yīng)用程序之前,我們需要安裝 MySql 驅(qū)動(dòng)程序??梢允褂妹钚忻?go get -u github.com/go-sql-driver/mysql 快捷安裝。

這是因?yàn)樵?Go 語(yǔ)言中,所有的數(shù)據(jù)訪問(wèn)都需通過(guò) SQL.DB 連接進(jìn)行。并且驅(qū)動(dòng)程序的目的是用來(lái)實(shí)現(xiàn) database/sql 的功能中那樣的的接口約定。

建立連接

在 Go 語(yǔ)言中,建立到 MySQL 數(shù)據(jù)庫(kù)的連接是基于連接字符串的,連接字符串包含連接 MySQL 所需的所有參數(shù),如用戶名、密碼、主機(jī)名或 IP 地址、端口號(hào)和數(shù)據(jù)庫(kù)名稱等。

db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
if err != nil {
    log.Fatal(err)
}

查詢數(shù)據(jù)

在 Go 語(yǔ)言中,可以使用 db.Query()、db.QueryRow()db.Exec() 函數(shù)查詢和操作 MySQL 數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

db.Query() 函數(shù)用于查詢多條記錄,返回一個(gè) *sql.Rows 對(duì)象。db.QueryRow() 函數(shù)用于查詢單條記錄,返回一個(gè) *sql.Row 對(duì)象,類似于 resultset,但是它只返回第一行記錄,通常用于查詢單個(gè)唯一記錄。db.Exec() 函數(shù)用于執(zhí)行非查詢 SQL 語(yǔ)句,例如 INSERT、UPDATE 和 DELETE,返回一個(gè) sql.Result 對(duì)象。

在本例中,我們使用 db.Query() 函數(shù)來(lái)查詢所有記錄。我們將使用一個(gè)簡(jiǎn)單的計(jì)數(shù)器來(lái)統(tǒng)計(jì)記錄的數(shù)量,并將每行數(shù)據(jù)打印到控制臺(tái)。

rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

count := 0
for rows.Next() {
    var id int
    var name string
    if err := rows.Scan(&id, &name); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("id=%d, name=%s\n", id, name)
    count++
}
if err := rows.Err(); err != nil {
    log.Fatal(err)
}

fmt.Printf("Found %d users\n", count)

必須在檢索數(shù)據(jù)后調(diào)用 rows.Close() 函數(shù)以釋放與 *sql.Rows 關(guān)聯(lián)的數(shù)據(jù)庫(kù)資源。同時(shí),代碼中使用了 rows.Next() 函數(shù),它返回一個(gè)布爾值,指示是否還有更多的行可以進(jìn)行處理。另外,在這個(gè)例子中使用了 rows.Scan() 函數(shù)將每行記錄的值復(fù)制到這個(gè)例子中定義的 idname 變量中,然后在控制臺(tái)中打印每個(gè)值。

插入數(shù)據(jù)

我們也可以使用 Go 語(yǔ)言插入數(shù)據(jù)到 MySQL 數(shù)據(jù)庫(kù)中,最簡(jiǎn)單的方法使用 db.Exec() 函數(shù)。我們可以將插入語(yǔ)句傳遞到 db.Exec() 函數(shù)中,它將以 SQL 語(yǔ)句的形式在 MySQL 中執(zhí)行。

result, err := db.Exec("INSERT INTO users(name, email) VALUES('John Doe', 'johndoe@gmail.com')")
if err != nil {
    log.Fatal(err)
}

rowsAffected, err := result.RowsAffected()
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Inserted %d rows into users table\n", rowsAffected)

我們可以使用 result.RowsAffected() 獲取結(jié)果集中受影響的行數(shù),并使用該數(shù)值在控制臺(tái)中打印更新數(shù)據(jù)的數(shù)量。

感謝各位的閱讀,以上就是“golang如何操作mysql數(shù)據(jù)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)golang如何操作mysql數(shù)據(jù)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

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

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

AI