iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0

在go使用mysql,除了go本身的套件外,github上也有許多MySQL套件可以選擇,這邊挑其中一個套件來介紹。

go-sql-driver/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 
	}

上一篇
Day15-資料庫
下一篇
Day17-Scylla
系列文
從0開始的golang web server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言