go語言開發(fā)mysql數(shù)據(jù)庫的使用

在進(jìn)行開發(fā)之前首先要使用git下載mysql的驅(qū)動(dòng)实蔽,github上面的mysql驅(qū)動(dòng)有好幾個(gè),我在這里選擇的https://github.com/go-sql-driver/mysql
執(zhí)行命令:go get -u github.com/go-sql-driver/mysql
在正式開發(fā)之前先創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)庫和表

CREATE TABLE `userinfo` (
    `autid` INT(10) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(64) NULL DEFAULT NULL,
    `departname` VARCHAR(64) NULL DEFAULT NULL,
    `password` VARCHAR(64) NULL DEFAULT NULL,
    `uid` VARCHAR(64) NULL DEFAULT NULL,
    `created` DATE NULL DEFAULT NULL,
    PRIMARY KEY (`uid`)
);

導(dǎo)入基本類庫

import (
    "crypto/md5"
    "database/sql"
    "encoding/hex"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "strconv"
    "time"
)

下面主要從增刪查改四個(gè)方面介紹go語言中mysql的使用

一舔痕、注冊(cè)數(shù)據(jù)庫驅(qū)動(dòng)

使用sql.Open()函數(shù)打開注冊(cè)一個(gè)注冊(cè)過的驅(qū)動(dòng),第一個(gè)參數(shù)是數(shù)據(jù)庫類型熟空,第二個(gè)參數(shù)是,第二個(gè)參數(shù)是DSN(Data Source Name)搞莺,它是go-sql-driver定義的一些數(shù)據(jù)庫鏈接和配置信息,DSN有以下格式:
user@unix(/path/to/socket)/dbname?charset=utf8
user:password@tcp(localhost:5555)/dbname?charset=utf8
user:password@/dbname
user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname

代碼如下:

const (
    DB_Driver = "root:meddeex@tcp(127.0.0.1:3306)/medex?charset=utf8"
)

func OpenDB() (success bool, db *sql.DB) {
    var isOpen bool
    db, err := sql.Open("mysql", DB_Driver)
    if err != nil {
        isOpen = false
    } else {
        isOpen = true
    }
    CheckErr(err)
    return isOpen, db
}
二息罗、插入

func insertToDB(db *sql.DB) {
    uid := GetNowtimeMD5()
    nowTimeStr := GetTime()
    stmt, err := db.Prepare("insert userinfo set username=?,departname=?,created=?,password=?,uid=?")
    CheckErr(err)
    res, err := stmt.Exec("wangbiao", "研發(fā)中心", nowTimeStr, "123456", uid)
    CheckErr(err)
    id, err := res.LastInsertId()
    CheckErr(err)
    if err != nil {
        fmt.Println("插入數(shù)據(jù)失敗")
    } else {
        fmt.Println("插入數(shù)據(jù)成功:", id)
    }
}
三、查詢
func QueryFromDB(db *sql.DB) {
    rows, err := db.Query("SELECT * FROM userinfo")
    CheckErr(err)
    if err != nil {
        fmt.Println("error:", err)
    } else {
    }
    for rows.Next() {
        var uid string
        var username string
        var departmentname string
        var created string
        var password string
        var autid string
        CheckErr(err)
        err = rows.Scan(&uid, &username, &departmentname, &created, &password, &autid)
        fmt.Println(autid)
        fmt.Println(username)
        fmt.Println(departmentname)
        fmt.Println(created)
        fmt.Println(password)
        fmt.Println(uid)
    }
}
四才沧、更新
func UpdateDB(db *sql.DB, uid string) {
    stmt, err := db.Prepare("update userinfo set username=? where uid=?")
    CheckErr(err)
    res, err := stmt.Exec("zhangqi", uid)
    affect, err := res.RowsAffected()
    fmt.Println("更新數(shù)據(jù):", affect)
    CheckErr(err)
}
五迈喉、刪除
func DeleteFromDB(db *sql.DB, autid int) {
    stmt, err := db.Prepare("delete from userinfo where autid=?")
    CheckErr(err)
    res, err := stmt.Exec(autid)
    affect, err := res.RowsAffected()
    fmt.Println("刪除數(shù)據(jù):", affect)
}

開發(fā)過程中用到的一些工具類方法

func CheckErr(err error) {
    if err != nil {
        panic(err)
        fmt.Println("err:", err)
    }
}

func GetTime() string {
    const shortForm = "2006-01-02 15:04:05"
    t := time.Now()
    temp := time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), time.Local)
    str := temp.Format(shortForm)
    fmt.Println(t)
    return str
}

func GetMD5Hash(text string) string {
    haser := md5.New()
    haser.Write([]byte(text))
    return hex.EncodeToString(haser.Sum(nil))
}

func GetNowtimeMD5() string {
    t := time.Now()
    timestamp := strconv.FormatInt(t.UTC().UnixNano(), 10)
    return GetMD5Hash(timestamp)
}
調(diào)用
func main() {
    opend, db := OpenDB()
    if opend {
        fmt.Println("open success")
    } else {
        fmt.Println("open faile:")
    }
    DeleteFromDB(db, 10)
    //QueryFromDB(db)
    //DeleteFromDB(db, 1)
    //UpdateDB(db, 5)
    //insertToDB(db)
    //UpdateUID(db, 5)
    //UpdateTime(db, 4)

}
寫在最后:

本篇文章主要介紹mysql在go語言開發(fā)中的基本使用,其實(shí)真正開發(fā)過程中還是主要使用orm相關(guān)第三方框架温圆,但是底層原理還是要學(xué)的挨摸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市岁歉,隨后出現(xiàn)的幾起案子得运,更是在濱河造成了極大的恐慌,老刑警劉巖刨裆,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澈圈,死亡現(xiàn)場(chǎng)離奇詭異彬檀,居然都是意外死亡帆啃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門窍帝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來努潘,“玉大人,你說我怎么就攤上這事》枥ぃ” “怎么了报慕?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長压怠。 經(jīng)常有香客問我眠冈,道長,這世上最難降的妖魔是什么菌瘫? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任蜗顽,我火速辦了婚禮,結(jié)果婚禮上雨让,老公的妹妹穿的比我還像新娘雇盖。我一直安慰自己,他們只是感情好栖忠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布崔挖。 她就那樣靜靜地躺著,像睡著了一般庵寞。 火紅的嫁衣襯著肌膚如雪狸相。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天捐川,我揣著相機(jī)與錄音卷哩,去河邊找鬼。 笑死属拾,一個(gè)胖子當(dāng)著我的面吹牛将谊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渐白,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼尊浓,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了纯衍?” 一聲冷哼從身側(cè)響起栋齿,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎襟诸,沒想到半個(gè)月后瓦堵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歌亲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年菇用,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陷揪。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惋鸥,死狀恐怖杂穷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卦绣,我是刑警寧澤耐量,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站滤港,受9級(jí)特大地震影響廊蜒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溅漾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一劲藐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧樟凄,春花似錦聘芜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叔壤,卻和暖如春瞎饲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炼绘。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工嗅战, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俺亮。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓驮捍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脚曾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子东且,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容