go操作mysql的驅動包很多,這里講解當下比較流行的Go-SQL-Driver/MySQL
1.下載安裝
執行下面兩個命令:
下載:go get github.com/Go-SQL-Driver/MySQL
安裝:go install github.com/Go-SQL-Driver/MySQL
安裝完成以后的文件截圖
root/go_s是go工作目錄,環境變量:$GOPATH中設置的值
2.導入包
import (
"database/sql"
_"github.com/Go-SQL-Driver/MySQL"
)
3.鏈接數據庫
Open函數:
db, err := sql.Open("mysql", "用戶名:密碼@tcp(IP:端口)/數據庫?charset=utf8")
例如:db, err := sql.Open("mysql", "root:111111@tcp(127.0.0.1:3306)/test?charset=utf8")
4.增刪改查
下面例子中的表結構:
CREATE TABLE `userinfo` (
`uid` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(64) DEFAULT NULL,
`departname` varchar(64) DEFAULT NULL,
`created` date DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
截圖:
增加
有兩種方法:
1.直接使用Exec函數添加
result, err := db.Exec("INSERT INTO userinfo (username, departname, created) VALUES (?, ?, ?)","lily","銷售","2016-06-21")
2.首先使用Prepare獲得stmt,然后調用Exec添加
stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")
res, err := stmt.Exec("zhja", "研發", "2016-06-17")
另一個經常用到的功能,獲得剛剛添加數據的自增ID
id, err := res.LastInsertId()
相關代碼截圖:
刪除
刪除和上面的增加語法一樣,只是把其中的INSERT語句改為DELETE語句
修改
修改和上面的增加語法一樣,只是把其中的INSERT語句改為UPDATE語句
查詢
查詢單條數據,QueryEow 函數
var username, departname, created string
err := db.QueryRow("SELECT username,departname,created FROM userinfo WHERE uid=?", 3).Scan(&username, &departname, &created)
代碼截圖:
查詢多條數據,並遍歷
Query 獲取數據,for xxx.Next() 遍歷數據
5.事務
在操作數據庫之前執行,db.Begin()
例:tx, err := db.Begin()
保存到數據庫:err := tx.Commit()
回滾:err := tx.Rollback()
注意設置事務以后操作數據庫就不是db了,而是tx
下面是寫文章時測試文件的源代碼,//注釋的內容請自行刪除測試
package main import ( //"fmt" "database/sql" _"github.com/Go-SQL-Driver/MySQL" ) type userinfo struct { username string departname string created string } func main(){ db, err := sql.Open("mysql", "root:111111@tcp(127.0.0.1:3306)/test?charset=utf8") checkErr(err) //insert //stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?") //checkErr(err) //res, err := stmt.Exec("zhja", "研發", "2016-06-17") //checkErr(err) //id, err := res.LastInsertId() //checkErr(err) //fmt.Println(id) //result, err := db.Exec("INSERT INTO userinfo (username, departname, created) VALUES (?, ?, ?)","lily","銷售","2016-06-21") //checkErr(err) //ids, err := result.LastInsertId() //fmt.Println(ids) //db.Exec("DELETE FROM userinfo WHERE uid=?", 1) //checkErr(err) //stmt, err := db.Prepare("DELETE FROM userinfo WHERE uid=?") //stmt.Exec(2) //var username, departname, created string //err = db.QueryRow("SELECT username,departname,created FROM userinfo WHERE uid=?", 3).Scan(&username, &departname, &created) //fmt.Println(username) //fmt.Println(departname) //fmt.Println(created) rows, err := db.Query("SELECT username,departname,created FROM userinfo WHERE username=?", "zhja") checkErr(err) for rows.Next() { var username, departname, created string if err := rows.Scan(&username, &departname, &created); err == nil { fmt.Println(err) } fmt.Println(username) fmt.Println(departname) fmt.Println(created) } tx, err := db.Begin() checkErr(err) stmt, err1 := tx.Prepare("INSERT INTO userinfo (username, departname, created) VALUES (?, ?, ?)") checkErr(err1) _, err2 := stmt.Exec("test", "測試", "2016-06-20") checkErr(err2) //err3 := tx.Commit() err3 := tx.Rollback() checkErr(err3) } func checkErr(err error){ if err != nil { panic(err) } }