最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go使用SQLX操作MySQL數(shù)據(jù)庫的教程詳解

 更新時間:2023年11月18日 10:37:16   作者:考慮考慮  
sqlx 是 Go 語言中一個流行的操作數(shù)據(jù)庫的第三方包,它提供了對 Go 標(biāo)準(zhǔn)庫 database/sql 的擴(kuò)展,簡化了操作數(shù)據(jù)庫的步驟,下面我們就來學(xué)習(xí)一下go如何使用SQLX實(shí)現(xiàn)MySQL數(shù)據(jù)庫的一些基本操作吧

前言

sqlx 是 Go 語言中一個流行的操作數(shù)據(jù)庫的第三方包,它提供了對 Go 標(biāo)準(zhǔn)庫 database/sql 的擴(kuò)展,簡化了操作數(shù)據(jù)庫的步驟,并且擁有很大的數(shù)據(jù)庫交互方法,本文使用mysql

sqlx使用

1.下載sqlx包

使用以下命令下載sqlx

 go get github.com/jmoiron/sqlx

2.引入驅(qū)動

_ "github.com/go-sql-driver/mysql"

3.連接數(shù)據(jù)庫說明

其連接數(shù)據(jù)庫使用

user:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True

其中user為數(shù)據(jù)庫用戶,password為數(shù)據(jù)庫密碼

4.連接數(shù)據(jù)庫代操作

package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)


var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫異常:", err)
		return
	}
	db = mysqlDb
}

5.插入數(shù)據(jù)

創(chuàng)建數(shù)據(jù)庫表位student

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `sex` int(11) NULL DEFAULT NULL,
  `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1690290594064429066 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

插入數(shù)據(jù)代碼為:

package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫異常:", err)
		return
	}
	db = mysqlDb
	r, err1 := db.Exec("insert into user(mobile, password, sex, user_name)values(?, ?, ?, ?)", "aaa", "123456", 1, "aaa")
	if err1 != nil {
		fmt.Println("數(shù)據(jù)插入異常, ", err1)
		return
	}
	id, err2 := r.LastInsertId()
	if err2 != nil {
		fmt.Println("獲取id異常:, ", err2)
		return
	}

	fmt.Println("id為:", id)
}

6.查詢數(shù)據(jù)

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

type User struct {
	Id       int64          `db:"id"`
	Name     string         `db:"user_name"`
	Sex      int            `db:"sex"`
	Mobile   string         `db:"mobile"`
	Password sql.NullString `db:"password"`
}

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫異常:", err)
		return
	}
	db = mysqlDb
	var user []User
	err1 := db.Select(&user, "select id, user_name, sex, mobile, password from user where id=?", 1690290594064429065)
	if err1 != nil {
		fmt.Println("查詢異常, ", err1)
		return
	}

	fmt.Println("查詢數(shù)據(jù)為:", user)
}

之所以password使用類型sql.NullString,是因?yàn)槿绻袨閚ull的話,會報錯,所以其會返回

遍歷false去判斷

7.更新數(shù)據(jù)

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

type User struct {
	Id       int64          `db:"id"`
	Name     string         `db:"user_name"`
	Sex      int            `db:"sex"`
	Mobile   string         `db:"mobile"`
	Password sql.NullString `db:"password"`
}

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫異常:", err)
		return
	}
	db = mysqlDb
	res, err := db.Exec("update user set user_name=? where id=?", "hello11", 1690290594064429065)
	if err != nil {
		fmt.Println("更新失敗:", err)
		return
	}
	row, err1 := res.RowsAffected()
	if err1 != nil {
		fmt.Println("獲取失敗, ", err1)
		return
	}
	fmt.Println("更新成功行數(shù):", row)
}

8.刪除數(shù)據(jù)

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)

type User struct {
	Id       int64          `db:"id"`
	Name     string         `db:"user_name"`
	Sex      int            `db:"sex"`
	Mobile   string         `db:"mobile"`
	Password sql.NullString `db:"password"`
}

var db *sqlx.DB

func main() {

	mysqlDb, err := sqlx.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True")
	if err != nil {
		fmt.Println("連接數(shù)據(jù)庫異常:", err)
		return
	}
	db = mysqlDb
	res, err := db.Exec("delete from user where id=?", 1690290594064429065)
	if err != nil {
		fmt.Println("刪除失敗, ", err)
		return
	}

	row, err := res.RowsAffected()
	if err != nil {
		fmt.Println("刪除行數(shù)為:", err)
		return
	}

	fmt.Println("刪除行數(shù)為: ", row)
}

總結(jié)

go有很多優(yōu)秀的操作數(shù)據(jù)庫組件,都能提高開發(fā)效率,至于在開發(fā)中怎么選擇組件,看個人開發(fā)效率和習(xí)慣

到此這篇關(guān)于go使用SQLX操作MySQL數(shù)據(jù)庫的教程詳解的文章就介紹到這了,更多相關(guān)go SQLX操作MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例

    golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例

    本文主要介紹了golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go并發(fā)編程中的錯誤恢復(fù)機(jī)制與代碼持續(xù)執(zhí)行實(shí)例探索

    Go并發(fā)編程中的錯誤恢復(fù)機(jī)制與代碼持續(xù)執(zhí)行實(shí)例探索

    這篇文章主要為大家介紹了Go并發(fā)編程中的錯誤恢復(fù)機(jī)制與代碼持續(xù)執(zhí)行實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Gin框架自帶參數(shù)校驗(yàn)的使用詳解

    Gin框架自帶參數(shù)校驗(yàn)的使用詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用Gin框架自帶的參數(shù)校驗(yàn),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下
    2023-09-09
  • golang jwt+token驗(yàn)證的實(shí)現(xiàn)

    golang jwt+token驗(yàn)證的實(shí)現(xiàn)

    這篇文章主要介紹了golang jwt+token驗(yàn)證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Go和RabbitMQ構(gòu)建高效的消息隊列系統(tǒng)

    Go和RabbitMQ構(gòu)建高效的消息隊列系統(tǒng)

    本文主要介紹了使用Go語言和RabbitMQ搭建一個簡單的消息隊列系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 詳解go-zero如何使用validator進(jìn)行參數(shù)校驗(yàn)

    詳解go-zero如何使用validator進(jìn)行參數(shù)校驗(yàn)

    這篇文章主要介紹了如何使用validator庫做參數(shù)校驗(yàn)的一些十分實(shí)用的使用技巧,包括翻譯校驗(yàn)錯誤提示信息、自定義提示信息的字段名稱、自定義校驗(yàn)方法等,感興趣的可以了解下
    2024-01-01
  • golang 實(shí)現(xiàn)時間戳和時間的轉(zhuǎn)化

    golang 實(shí)現(xiàn)時間戳和時間的轉(zhuǎn)化

    這篇文章主要介紹了golang 實(shí)現(xiàn)時間戳和時間的轉(zhuǎn)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 執(zhí)行g(shù)o?build報錯go:?go.mod?file?not?found?in?current?directory?or?any?parent?directory

    執(zhí)行g(shù)o?build報錯go:?go.mod?file?not?found?in?current?dir

    本文主要為大家介紹了執(zhí)行g(shù)o build報錯go:?go.mod?file?not?found?in?current?directory?or?any?parent?directory解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 基于Go語言開發(fā)一個 IP 歸屬地查詢接口工具

    基于Go語言開發(fā)一個 IP 歸屬地查詢接口工具

    在日常開發(fā)中,IP 地址歸屬地查詢是一個常見需求,本文將帶大家使用 Go 語言快速開發(fā)一個 IP 歸屬地查詢接口服務(wù),有需要的小伙伴可以了解下
    2025-09-09
  • Go 數(shù)據(jù)結(jié)構(gòu)之堆排序示例詳解

    Go 數(shù)據(jù)結(jié)構(gòu)之堆排序示例詳解

    這篇文章主要為大家介紹了Go 數(shù)據(jù)結(jié)構(gòu)之堆排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評論

射洪县| 剑河县| 怀安县| 大兴区| 周口市| 左权县| 濉溪县| 常山县| 恩施市| 建阳市| 旌德县| 宿松县| 宽城| 游戏| 玛沁县| 岫岩| 江陵县| 贵州省| 镇坪县| 阿合奇县| 高雄县| 舒兰市| 彩票| 云南省| 渝北区| 天长市| 宁国市| 房产| 荥阳市| 河津市| 崇左市| 清流县| 鱼台县| 漳平市| 玉林市| 清苑县| 广南县| 铁力市| 乌鲁木齐县| 元谋县| 承德县|