在go使用mysql,除了go本身的套件外,github上也有許多MySQL套件可以選擇,這邊挑其中一個套件來介紹。
這個套件應該算是最多人使用的MySQL套件,架設連線方式也很好理解:
mysqlMaster, err := sql.Open("mysql", "root:my-secret-pw@tcp(127.0.0.1:3306)/user")
if err != nil {
log.Println(err)
return
}
透過這種方式建立出來的mysqlMaster,可以再額外設定最大連線,最大idle跟最大連線時間:
mysqlMaster.SetMaxIdleConns(30)
mysqlMaster.SetMaxOpenConns(100)
mysqlMaster.SetConnMaxLifetime(10 * time.Second)
而要從DB取得資料,則是用Query來進行Select語法:
para := []interface{}{}
rows, err := masterSQLDriver.Query("SELECT id FROM user ", para...)
if err != nil {
log.Println(err)
return
}
for rows.Next() {
var userID string
scanErr := rows.Scan(&userID)
if scanErr != nil {
log.Println(scanErr)
return
}
log.Println(userID)
}
如果是要更新 新增或刪除資料,最好先建立transaction,再透過Exec來下新增資料的語法,如果不先建立transaction的話,有可能會出現更動又被存取同一筆資料,這是必須要避免的:
tx, err := masterSQLDriver.Begin()
if err != nil {
...
return
}
_, err = tx.Exec("UPDATE `user` SET user_name=? WHERE id = ?", "jim", 1)
if err != nil {
errRollBack := tx.Rollback()
if errRollBack != nil {
...
return
}
return
}
err = tx.Commit()
if err != nil {
return
}