Go 语言高效连接 SQL Server(MSSQL)数据库实战指南

在 Go 语言的开发过程中,与 Microsoft SQL Server (MSSQL) 数据库的交互是常见需求之一。本文将详细介绍如何使用 Go 语言高效、安全地连接 SQL Server,并进行基本的 CRUD(增删改查)操作。

1. 安装 MSSQL 驱动

Go 语言使用 github.com/denisenkom/go-mssqldb 作为 SQL Server 驱动,首先需要安装它:

go 复制代码
go get -u github.com/denisenkom/go-mssqldb

2. 连接 MSSQL 数据库

在 Go 代码中,使用 database/sql 包结合 go-mssqldb 进行数据库连接。

go 复制代码
package main

import (
    "database/sql"
    "fmt"
    "log"
    _ "github.com/denisenkom/go-mssqldb"
)

func main() {
    // 配置 SQL Server 连接信息
    server := "localhost"
    port := 1433
    user := "sa"
    password := "your_password"
    database := "your_db"

    dsn := fmt.Sprintf("server=%s;port=%d;user id=%s;password=%s;database=%s;encrypt=disable",
        server, port, user, password, database)
    
    db, err := sql.Open("sqlserver", dsn)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 测试连接
    if err := db.Ping(); err != nil {
        log.Fatal(err)
    }
    fmt.Println("成功连接到 MSSQL 数据库!")
}

3. 执行 SQL 查询

插入数据

css 复制代码
query := "INSERT INTO users (name, age) VALUES (@p1, @p2)"
result, err := db.Exec(query, "李四", 30)
if err != nil {
    log.Fatal(err)
}
lastInsertID, _ := result.LastInsertId()
fmt.Println("插入成功,ID:", lastInsertID)

查询数据

go 复制代码
query := "SELECT id, name, age FROM users WHERE age > @p1"
rows, err := db.Query(query, 25)
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

for rows.Next() {
    var id int
    var name string
    var age int
    err := rows.Scan(&id, &name, &age)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
}

4. 连接池优化

在高并发场景下,合理配置数据库连接池参数可以提升性能。

scss 复制代码
db.SetMaxOpenConns(100) // 最大打开连接数
db.SetMaxIdleConns(10)  // 最大空闲连接数
db.SetConnMaxLifetime(60 * time.Second) // 连接最大存活时间

5. 事务处理

scss 复制代码
tx, err := db.Begin()
if err != nil {
    log.Fatal(err)
}

_, err = tx.Exec("UPDATE accounts SET balance = balance - @p1 WHERE id = @p2", 100, 1)
if err != nil {
    tx.Rollback()
    log.Fatal(err)
}

_, err = tx.Exec("UPDATE accounts SET balance = balance + @p1 WHERE id = @p2", 100, 2)
if err != nil {
    tx.Rollback()
    log.Fatal(err)
}

tx.Commit()
fmt.Println("事务提交成功!")

6. 结论

本文介绍了 Go 语言连接 MSSQL 数据库的完整流程,包括驱动安装、基本 CRUD 操作、连接池优化和事务处理等。希望能帮助你更高效地使用 Go 进行 SQL Server 数据库开发!

相关推荐
nbwenren1 小时前
Springboot中SLF4J详解
java·spring boot·后端
helx822 小时前
SpringBoot中自定义Starter
java·spring boot·后端
rleS IONS3 小时前
SpringBoot获取bean的几种方式
java·spring boot·后端
lifewange3 小时前
Go语言-开源编程语言
开发语言·后端·golang
白毛大侠3 小时前
深入理解 Go:用户态和内核态
开发语言·后端·golang
王码码20354 小时前
Go语言中的数据库操作:从sqlx到ORM
后端·golang·go·接口
星辰_mya5 小时前
雪花算法和时区的关系
数据库·后端·面试·架构师
计算机学姐6 小时前
基于SpringBoot的兴趣家教平台系统
java·spring boot·后端·spring·信息可视化·tomcat·intellij-idea
總鑽風6 小时前
单点登录springcloud+mysql
后端·spring·spring cloud
0xDevNull6 小时前
Java 11 新特性概览与实战教程
java·开发语言·后端