精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go語言操作MySQL語言基礎知識

數據庫 MySQL
本次主要講述了Go如何操作Mysql,如何進行增刪改查,最后還講了以下什么是事物,如何操作事物。

 前言

通常情況下,我們程序員和數據庫打交道是最多的。要然我們怎么會被稱為碼農呢。

存用戶信息需要數據庫,存訂單需要數據庫,等等等等,現在真是數據驅動著發展。

但是數據庫種類有很多,有Mysql,Oracle,SQL Server。

本篇就示例如何Go操作Mysql。

準備工作

本次使用的是go mod進行包依賴管理,還不會使用的向上爬梯子,找go mod用法。

使用的庫是第三方庫go-sql-driver/mysql。

準備工作之連接數據庫

代碼

  1. func main() { 
  2.     var username = "root" 
  3.     var password = "rootroot" 
  4.     var ip = "127.0.0.1" 
  5.     var port = "3306" 
  6.     var data = "go_mysql_demo" 
  7.     var dsn = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", username, password, ip, port, data) 
  8.     //Open只會驗證dsb的格式是否正確,不會驗證是否連接成功,同理,密碼是否正確也不知道 
  9.     db, err := sql.Open("mysql", dsn) 
  10.     if err != nil { 
  11.         panic(err) 
  12.     //關閉連接在 err 之后,因為可能直接就打開不成功,關閉一個沒有打開的連接??? 
  13.     defer db.Close() 
  14.     // 此時嘗試連接數據庫,會判斷用戶,密碼,ip地址,端口是否正確 
  15.     err = db.Ping() 
  16.     if err != nil { 
  17.         fmt.Println("連接數據庫失敗,",err) 
  18.         return 
  19.     //設置與數據庫建立連接的最大數目,一般不管 
  20.     db.SetMaxOpenConns(100) 
  21.     //設置連接池中的最大閑置連接數,一般不管 
  22.     db.SetMaxIdleConns(50) 

注意

  • sql.Open只會驗證格式是否正確,不會連接數據庫。
  • db.Close在err之后,是因為可能打開不成功,關閉一個沒有打開的連接。
  • db.Ping會連接數據庫,判斷用戶,密碼,ip地址,端口是否正確。

準備工作之創建表

我們創建一個簡單的用戶表。

  1. CREATE TABLE `userinfo` ( 
  2.   `id` int(11) NOT NULL AUTO_INCREMENT, 
  3.   `namevarchar(10) DEFAULT NULL, 
  4.   `phone` char(11) DEFAULT NULL, 
  5.   `address` varchar(64) DEFAULT NULL, 
  6.   PRIMARY KEY (`id`) 
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

準備工作之創建結構體

假設上述工作都完成了啊。

不知道有沒有想過,我們查詢的數據,存成啥?,字符串?map?切片?,似乎都不是太好。

只有結構體是最清晰的,最好認識的。

結構體

  1. type Userinfo struct { 
  2.     Id      int64  `json:"id"
  3.     Name    string `json:"name"
  4.     Phone   string `json:"phone"
  5.     Address string `json:"address"

查詢單條

單條查詢使用QueryRow方法。

代碼

  1. //查詢單條 
  2. sqlStr := "SELECT id,`name`,phone,address from userinfo where id = ?;" 
  3. var user Userinfo 
  4. /* 
  5.     QueryRow 第二個參數可以接收多個參數,同理,sqlStr可以有多個 ?占位符 進行匹配 
  6.     QueryRow 之后必須調用Scan方法進行數據綁定,進行數據庫鏈接釋放 
  7. */ 
  8. err = db.QueryRow(sqlStr, 1).Scan(&user.Id, &user.Name, &user.Phone, &user.Address) 
  9. if err != nil { 
  10.     fmt.Println("查詢失敗", err) 
  11.     return 
  12. fmt.Println(user

執行結果


查詢多條

多行查詢使用Query。

代碼

  1. //查詢多條 
  2. sqlStr := "SELECT id,`name`,phone,address from userinfo where id >= ?" 
  3. //參數同 QueryRow 
  4. rows, err := db.Query(sqlStr, 1) 
  5. if err != nil { 
  6.     fmt.Println("查詢失敗:", err) 
  7.     return 
  8. // 此處使用rows釋放所有鏈接 
  9. defer rows.Close() 
  10. //循環整理所有數據 
  11. var userList = make([]Userinfo, 0, 10) 
  12. for rows.Next() { 
  13. var user Userinfo 
  14. err = rows.Scan(&user.Id, &user.Name, &user.Phone, &user.Address) 
  15. if err != nil { 
  16.     fmt.Println("綁定數據失敗", err) 
  17.     return 
  18. userList = append(userList, user
  19. fmt.Println(userList) 

執行結果


插入數據

插入數據需要用到Exec。

代碼

  1. //插入數據 
  2. sqlStr := "INSERT into userinfo(name,phone,address) values(?,?,?);" 
  3. result, err := db.Exec(sqlStr, "吳彥祖", 555, "不知道哪的"
  4. if err != nil { 
  5.     fmt.Println("插入失敗", err) 
  6.     return 
  7. //受影響的行數 
  8. row_affect, err := result.RowsAffected() 
  9. if err != nil { 
  10.     fmt.Println("受影響行數獲取失敗:", err) 
  11.     return 
  12. fmt.Println("受影響的行數:", row_affect) 
  13. lastId, err := result.LastInsertId() 
  14. if err != nil { 
  15.     fmt.Println("新增行id獲取失敗:", err) 
  16.     return 
  17. fmt.Println("新增行id:", lastId) 
  18. fmt.Println("插入成功"

執行結果


Mysql


更新數據

更新和添加差不多,用的都是Exec。

代碼

  1. //更新數據 
  2. sqlStr := `UPDATE userinfo set name=? where id=?;` 
  3. result, err := db.Exec(sqlStr, "吳彥祖666", 3) 
  4. if err != nil { 
  5.     fmt.Println("更新失敗", err) 
  6.     return 
  7. //受影響的行數 
  8. row_affect, err := result.RowsAffected() 
  9. if err != nil { 
  10.     fmt.Println("受影響行數獲取失敗:", err) 
  11.     return 
  12. fmt.Println("受影響的行數:", row_affect) 
  13. fmt.Println("更新成功"

執行結果


Mysql


刪除數據

刪除數據用的還是Exec。

代碼

  1. //刪除數據 
  2. sqlStr := "delete from userinfo where id = ?;" 
  3. result, err := db.Exec(sqlStr, 3) 
  4. if err != nil { 
  5.     fmt.Println("刪除失敗", err) 
  6.     return 
  7. //受影響的行數 
  8. row_affect, err := result.RowsAffected() 
  9. if err != nil { 
  10.     fmt.Println("受影響行數獲取失敗:", err) 
  11.     return 
  12. fmt.Println("受影響的行數:", row_affect) 
  13. fmt.Println("刪除成功"

執行結果


Mysql


事物

事物,這個用的就比較多了,通常用在關鍵的場景。

尤其是轉賬,張三-10塊,李四+10塊,這個動作動作是要在一起完成的。

如果任何一個失敗了,就要恢復上一次的狀態。

我們通常也叫這個操作叫做原子操作,要成功,都成功,要完蛋,都完蛋。

新建表

  1. CREATE TABLE `bill` ( 
  2.   `id` int(11) NOT NULL AUTO_INCREMENT, 
  3.   `namevarchar(8) NOT NULL, 
  4.   `money` int(11) NOT NULL, 
  5.   PRIMARY KEY (`id`) 
  6. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4; 

表數據

張三和李四都剩余100塊


Go Mysql 關于事物相關方法

Go 關于事物有三個方法

  • Begin()開始事物。
  • Commit()提交事物。
  • Rollback()失敗回滾。

模擬轉賬:張三-10塊,李四+十塊

代碼

  1. func main() { 
  2.     //事物 
  3.     //開啟事物 
  4.     tx, err := db.Begin() 
  5.     if err != nil { 
  6.         //釋放事物 
  7.         if tx != nil { 
  8.             tx.Rollback() 
  9.         } 
  10.         fmt.Println("事物開啟失敗"
  11.         return 
  12.  
  13.     張三減10塊Sql := `UPDATE bill set money=money - 10 where name = ?;` 
  14.     result, err := tx.Exec(張三減10塊Sql, "張三"
  15.     if err != nil { 
  16.         //有錯誤表示更是失敗,回滾原來狀態 
  17.         tx.Rollback() 
  18.         fmt.Println(err) 
  19.         return 
  20.     張三受影響行數, err := result.RowsAffected() 
  21.     if err != nil { 
  22.         tx.Rollback() // 回滾 
  23.         return 
  24.  
  25.     李四加10塊Sql := `UPDATE bill set money=money + 10 where name = ?;` 
  26.     result, err = tx.Exec(李四加10塊Sql, "李四"
  27.     if err != nil { 
  28.         //有錯誤表示更是失敗,回滾原來狀態 
  29.         tx.Rollback() 
  30.         fmt.Println(err) 
  31.         return 
  32.     李四受影響行數, err := result.RowsAffected() 
  33.     if err != nil { 
  34.         tx.Rollback() // 回滾 
  35.         return 
  36.     //都等于1表示成功,可以提交事務,修改數據 
  37.     if 張三受影響行數==1 && 李四受影響行數==1{ 
  38.         //提交事務 
  39.         fmt.Println("提交事務"
  40.         tx.Commit() 
  41.     }else
  42.         //有一個!=1表示沒有更新成功,可能用戶不存在 
  43.         fmt.Println("失敗了,事物回滾了"
  44.         tx.Rollback() 
  45.     fmt.Println("事物執行成功"

執行結果


Mysql

一加一減


假如出錯了


Mysql

如果使用事物,出錯了數據還是沒變。


總結

本次主要講述了Go如何操作Mysql,如何進行增刪改查,最后還講了以下什么是事物,如何操作事物。

當然,這種是最原始的方法,過程有些繁瑣,了解入門就好,后面還有更方便的方法。

 

責任編輯:姜華 來源: Go語言進階學習
相關推薦

2024-01-07 19:54:51

2010-01-19 14:45:35

C++語言

2020-07-02 16:20:36

MySQLCURD數據庫

2011-07-21 17:45:02

java

2011-07-22 09:43:37

java

2011-07-21 17:33:27

JAVA

2011-07-21 17:18:52

java

2011-07-22 10:38:04

java

2011-07-22 10:02:07

java

2023-12-30 10:22:57

Go語言函數開發

2021-04-19 08:35:44

PythonPython語言Python基礎

2021-01-27 10:01:46

MySQL數據庫SQLX

2023-07-03 00:44:26

Go語言MySQL

2010-04-13 18:24:14

Unix操作系統

2010-04-07 15:59:29

Unix操作系統

2025-05-19 10:00:00

MySQL數據庫InnoDB

2018-03-12 22:13:46

GO語言編程軟件

2021-06-09 09:06:52

Go語言算法

2021-02-06 18:19:54

TimeGo語言

2024-12-30 00:38:23

Go語言微服務
點贊
收藏

51CTO技術棧公眾號

日本午夜精品一区二区三区电影| 日本高清不卡一区二区三区视频| 国产一区二区在线视频| 欧美激情一级精品国产| 在线 丝袜 欧美 日韩 制服| 性欧美gay| 亚洲激情图片qvod| 免费精品视频一区二区三区| 国产精品嫩草影院精东| 一本色道久久综合亚洲精品高清| 中文字幕一区二区精品| 丰满岳乱妇一区二区| av久久网站| 五月天网站亚洲| 亚洲免费av网| 久久久久久久久亚洲精品| 蜜桃视频一区二区三区在线观看| 欧美激情视频网| 中文乱码字幕高清一区二区| 欧美一区 二区| 日韩色在线观看| 中文字幕 91| 成人欧美大片| 亚洲福利视频一区| 中文字幕第一页亚洲| 你懂的免费在线观看视频网站| 国产精品系列在线观看| 国产精品久在线观看| 日本天堂网在线| 亚洲成人精品| 中文字幕av日韩| 91成年人网站| 中文精品一区二区| 亚洲国产女人aaa毛片在线| 午夜福利123| www.一区| 欧美亚洲动漫另类| 国内外免费激情视频| 国产伦理精品| 亚洲国产综合色| 青青青在线观看视频| 国产原创精品视频| 亚洲欧美一区二区三区极速播放| 亚洲精品乱码久久久久久蜜桃91 | 欧美中文字幕一区二区三区亚洲| 青青青青草视频| 欧美亚洲天堂| 亚洲综合视频在线| www.一区二区.com| 手机电影在线观看| 一区二区三区四区在线| 国产欧美123| av毛片在线| 亚洲精品乱码久久久久| 四虎4hu永久免费入口| v片在线观看| 亚洲欧美成人一区二区三区| 亚洲第一精品区| 免费观看成人高潮| 亚洲日本欧美天堂| 91看片淫黄大片91| 蜜乳av一区| 精品久久久久久久久久久久久久| 成人毛片视频网站| 精品国产免费人成网站| 欧美制服丝袜第一页| www.激情小说.com| 国产精品原创视频| 777久久久精品| 波多野结衣中文字幕在线播放| 亚洲图色一区二区三区| 亚洲电影免费观看高清完整版在线观看 | 亚洲欧美精品一区二区| 国产免费无遮挡吸奶头视频| av亚洲在线观看| 久久亚洲精品网站| 精品肉丝脚一区二区三区| 亚洲激情亚洲| 国产精品美女久久久久久免费| 中文字幕在线观看免费| 国产成人精品午夜视频免费 | 午夜久久久久久久久久| 99在线热播精品免费| 日本在线观看一区| 成人毛片av在线| 欧美日韩亚洲高清| 成人综合久久网| 国内自拍欧美| 在线毛片观看| 亚洲欧美日韩国产综合在线| 黄页免费在线观看视频| 日韩欧美2区| 日韩欧美一二区| 最新中文字幕视频| 99久久这里只有精品| 97精品视频在线播放| 中文字幕人妻色偷偷久久| 国产成人精品影视| 亚洲国产一区二区精品视频| 3344国产永久在线观看视频| 欧美午夜视频网站| 日本三级日本三级日本三级极| 精品一二三区| 午夜欧美大片免费观看| 这里只有精品9| 91在线视频播放地址| 国产av不卡一区二区| 成人免费看黄| 亚洲аv电影天堂网| 一本一本久久a久久| 香蕉亚洲视频| 国产精品高清一区二区三区| 在线免费观看的av网站| 好吊成人免视频| 欧美69精品久久久久久不卡| 欧美一区2区| 欧美又大又硬又粗bbbbb| 国产日韩欧美一区二区东京热 | 337p亚洲精品色噜噜噜| 少妇真人直播免费视频| 亚洲三级影院| av免费精品一区二区三区| 自拍视频在线网| 色偷偷久久一区二区三区| 国产精品久久久久久亚洲色| 亚欧美无遮挡hd高清在线视频| 日韩美女中文字幕| 凸凹人妻人人澡人人添| 亚洲最色的网站| 992tv人人草| 99国产精品一区二区| 国产精品久久久久久av福利| 免费黄网站在线观看| 精品国产鲁一鲁一区二区张丽| 精品无码av一区二区三区| 一本一道久久a久久精品蜜桃 | 国产精品久久午夜| 男人女人黄一级| 久久av网址| 欧洲精品久久久| 青青草在线免费观看| 精品国产成人在线| 无码人妻精品一区二区三区温州| 精品白丝av| 精品国产一区二区三区久久久久久| 天堂va在线| 欧美成人三级在线| 久久久久久久极品内射| 国产宾馆实践打屁股91| 国产爆乳无码一区二区麻豆| 成人偷拍自拍| 91国在线精品国内播放| 性xxxx视频| 午夜精品视频一区| aaaaaav| 久久久久久穴| 日韩影片在线播放| 亚洲免费一区| 久久99精品视频一区97| 亚洲第一色网站| 五月天欧美精品| 91精品人妻一区二区| 日韩中文字幕区一区有砖一区| 日韩精品不卡| 2019中文亚洲字幕| 久久男人资源视频| 男男激情在线| 欧美军同video69gay| 久久r这里只有精品| 99久久精品一区二区| 精品国产成人av在线免| 日韩电影二区| 99精品国产高清一区二区| 麻豆网站免费在线观看| 在线观看国产成人av片| 国产精品无码久久av| 亚洲午夜视频在线| 91l九色lporny| 国模无码大尺度一区二区三区| 国产日韩亚洲欧美在线| 久久91麻豆精品一区| 91精品视频大全| 国产不卡人人| 久久精品国产91精品亚洲| 99久久精品国产一区二区成人| 亚洲福利视频一区| 美女av免费看| eeuss鲁片一区二区三区在线观看| 色婷婷综合久久久久中文字幕| 91超碰成人| 欧美一区二区视频17c | 蜜桃狠狠色伊人亚洲综合网站| 日本精品裸体写真集在线观看| 免费av在线一区| 九色在线视频蝌蚪| 精品乱人伦小说| 亚洲一区二区视频在线播放| 亚洲成人av福利| 亚洲 欧美 国产 另类| 不卡一区二区在线| 97超碰人人爽| 视频一区中文字幕| h无码动漫在线观看| 日韩成人激情| 欧美日韩在线高清| 国产精品极品在线观看| 91精品中文在线| 88xx成人免费观看视频库| 久久人人看视频| 成人黄视频在线观看| 一区二区三区视频观看| 色欲av永久无码精品无码蜜桃 | 四虎成人免费在线| 日韩三级中文字幕| 夜夜爽8888| 欧美在线观看一区二区| 亚洲黄色三级视频| 亚洲制服丝袜av| 国产免费美女视频| 国产日本欧洲亚洲| 爱爱免费小视频| 99在线精品免费| 免费观看一区二区三区| 久久精品免费看| 丰满少妇在线观看| 日韩中文字幕亚洲一区二区va在线 | 亚洲综合中文字幕在线| 久久青草视频| 国产精品扒开腿做| 日韩新的三级电影| 91高清免费在线观看| 丁香花视频在线观看| 美女国内精品自产拍在线播放| 午夜在线视频| 少妇高潮久久77777| 福利在线观看| 在线观看日韩视频| 91女主播在线观看| 中文字幕国产亚洲2019| 超碰免费在线| 中文字幕欧美日韩| 香蕉视频在线看| 色婷婷综合久久久久| 日韩伦理在线电影| 日韩在线中文字| 麻豆传媒在线免费| 精品中文字幕在线| 免费在线中文字幕| 97国产suv精品一区二区62| 青青青免费在线视频| 91大神在线播放精品| 成人在线爆射| 成人国产在线视频| 精品国产一区二区三区性色av | 国内精品400部情侣激情| wwwwxxxx在线观看| 97国产精品人人爽人人做| 小视频免费在线观看| 国产成人涩涩涩视频在线观看| 韩国精品主播一区二区在线观看| 国产精品精品国产| 久久亚洲人体| 超碰97国产在线| 日韩影视高清在线观看| 日本精品一区二区三区不卡无字幕| 成人3d动漫在线观看| 手机福利在线视频| 在线不卡视频| 又色又爽又高潮免费视频国产| 麻豆精品视频在线观看视频| 国产九九九视频| 99久久精品久久久久久清纯| 欧美 日韩 国产 成人 在线观看| 中文字幕在线不卡一区| 久久久久亚洲AV| 色噜噜狠狠成人网p站| 亚洲怡红院av| 亚洲成人网久久久| 亚洲成a人v欧美综合天堂麻豆| 欧美激情精品久久久久久大尺度| 自拍视频在线看| 成人信息集中地欧美| 狼人精品一区二区三区在线 | 欧美91福利在线观看| 免费观看美女裸体网站| 蜜桃在线一区二区三区| 黄色免费看视频| 国产精品系列在线| 国产午夜久久久| 欧美麻豆精品久久久久久| 天堂在线资源网| 久久精品亚洲热| 亚洲欧洲自拍| 999精品在线观看| 深爱激情综合网| 99久久免费观看| 奇米四色…亚洲| 五十路六十路七十路熟婆| 国产精品久久久久久久久免费相片 | 欧美亚洲综合另类| 蜜桃av中文字幕| 中文字幕亚洲欧美一区二区三区| wwww在线观看免费视频| 成人性生交xxxxx网站| 一道本一区二区三区 | 国产精品一页| 91香蕉视频在线观看视频| 中文一区二区在线观看| 国产福利拍拍拍| 日韩一区二区在线观看视频播放| 大胆av不用播放器在线播放 | 国产精品美女午夜爽爽| 久久国产一区| 一区视频在线| 91网址在线观看精品| 国产日韩欧美激情| 日本午夜视频在线观看| 精品国产亚洲在线| 中文在线字幕免费观看| 国产精品亚洲一区二区三区| 夜夜春成人影院| 高清在线观看免费| 成人av网站在线观看| 久热这里有精品| 91精品国产欧美一区二区| av在线电影院| 国产精品高潮呻吟视频| 国产成人手机高清在线观看网站| 高清在线观看免费| 26uuu亚洲综合色| 国产区在线观看视频| 亚洲国产精品悠悠久久琪琪| caoporn-草棚在线视频最| 99免费在线观看视频| 欧美精品一区二区三区久久久竹菊| 天天干天天操天天玩| 日本一区二区免费在线观看视频 | 日韩精品一区二区三区在线播放| 久草中文在线观看| 91久久国产综合久久91精品网站| 日韩理论在线| 福利视频999| 日韩毛片在线免费观看| 国产女人18毛片水18精| 久久成人这里只有精品| 日本高清久久| 黄色激情在线视频| 91丨porny丨国产入口| 69成人免费视频| 亚洲图片欧洲图片av| 美女网站视频一区| 一区二区视频国产| 国产一区二区三区四| 激情综合网五月天| 亚洲国产高清自拍| 欧美电影免费看| 色综合666| 老司机精品视频在线| 91人妻一区二区三区蜜臀| 精品福利一区二区三区免费视频| gogo久久| 日韩国产欧美精品| 国产麻豆午夜三级精品| 国产精彩视频在线观看| 亚洲片国产一区一级在线观看| 成人国产综合| 粉嫩av一区二区三区天美传媒| www.色综合.com| 艳妇乳肉豪妇荡乳av无码福利| 久久久av亚洲男天堂| 久久男人av| xx欧美撒尿嘘撒尿xx| 亚洲精品一二三四区| 五月天丁香视频| 国产精品视频专区| 国内一区二区三区| 国产精久久一区二区三区| 5566中文字幕一区二区电影| 超碰在线97国产| 亚洲成人a**址| 成人永久看片免费视频天堂| 亚洲成熟少妇视频在线观看| 波霸ol色综合久久| 日韩av系列| 999久久久精品视频| 调教+趴+乳夹+国产+精品| 成人高清在线| 国产精品日韩高清| 麻豆一区二区三区| 黄色片视频网站| 久久精品久久久久电影| 欧美色资源站| 91精品视频国产| 色呦呦国产精品| 动漫一区二区| 免费观看中文字幕| 国产日韩欧美电影| 欧美亚洲精品在线观看| 国产日韩精品在线观看| 亚洲尤物精选|