go操作資料庫 Go-SQL-Driver/MySQL 使用詳解

來源:互聯網
上載者:User

標籤:

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:[email protected](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 mainimport (//"fmt""database/sql"_"github.com/Go-SQL-Driver/MySQL")type userinfo struct {usernamestringdepartnamestringcreatedstring}func main(){db, err := sql.Open("mysql", "root:[email protected](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 stringif 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)}}

 

go操作資料庫 Go-SQL-Driver/MySQL 使用詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.