go操作數據庫 Go-SQL-Driver/MySQL 使用詳解


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)
	}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM