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
}