Golang中如何對MySQL進行操作詳解
阿新 • • 發佈:2020-01-09
前言
Golang官方並沒有提供資料庫驅動,但通過database/sql/driver包來提供了實現驅動的標準介面。可以在Github上找到很多開源的驅動。
其中go-sql-driver/mysql是一個比較推薦的驅動,其完全支援database/sql介面。
使用這個驅動,在專案裡import進:
import ( "database/sql" _ "github.com/go-sql-driver/mysql" )
在正式使用database/sql包之前,首先得明白sql.DB並不代表一個數據庫連線,它並不會與資料庫建立任何連線,也不會驗證引數的合法性,要想知道DSN的合法性,需使用sql.DB例項(比如db)db.Ping() 方法, 如下:
err = db.Ping() if err != nil { // 錯誤處理 }
使用sql.Open()方法即可獲得一個sql.DB例項。需要注意的是,sql.DB的設計就是用來作為長連線使用的,不應該在專案裡頻繁的進行Open()與Close(),提倡的做法是宣告一個全域性的sql.DB例項,將其複用起來。即只Open()一次,使用直到程式結束任務。
拿到sql.DB例項之後,就可以對資料庫進行操作了。
在操作資料庫時,推薦做法是使用db.Prepare()對SQL語句進行預編譯,這樣具有較高的安全性,可在一定程度上避免諸如SQL注入這樣的攻擊手段。
一些示例:
/* 查詢操作 */ stmt,err := db.Prepare("SELECT `user_name` FROM `users` WHERE `id` = ?") defer stmt.Close() if err != nil { //錯誤處理 } var userName string //Scan() 將結果複製到userName err = stmt.QueryRow(1).Scan(&userName) fmt.Println(userName) /* 多行結果 */ stmt,err := db.Prepare("SELECT `user_name` FROM `users` WHERE `age` = ?") defer stmt.Close() if err != nil { //錯誤處理 } rows,err := stmt.Query(年齡) if err != nil { //錯誤處理 } for rows.Next() { var userName string if err := rows.Scan(&userName); err != nil { //錯誤處理 } }
/* 插入操作 */ stmt,err := db.Prepare("INSERT INTO `users` (`user_name`,`age`) VALUES(?,?)") defer stmt.Close() if err != nil { //錯誤處理 } stmt.Exec("名字",年齡)
/* 事務 */ tx,err := db.Begin() if err != nil { //錯誤處理 } defer tx.Rollback() stmt,err := db.Prepare("") defer stmt.Close() if err != nil { //錯誤處理 } stmt.Exec() err = tx.Commit() if err != nil { //錯誤處理 }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。