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 数据库开发!

相关推荐
bobz9651 小时前
qemu 对于外部网卡的配置方式
后端
techdashen2 小时前
Rust主流框架性能比拼: Actix vs Axum vs Rocket
开发语言·后端·rust
普通网友2 小时前
内置AI与浏览器的开源终端Wave Terminal安装与远程连接内网服务器教程
开发语言·后端·golang
Gvemis⁹2 小时前
Scala总结(八)
开发语言·后端·scala
Asthenia04123 小时前
详细解析Canal如何解析MySQL Binlog+Json格式的细节
后端
续亮~4 小时前
ANP协议深度解析:智能体网络协议的演进与革新
网络·后端·网络协议·ai·ai编程
谦行4 小时前
前端视角 Java Web 入门手册 5.1:真实世界 Web 开发——初识 Spring Boot
java·后端
!!!5254 小时前
Spring Boot 整合 MongoDB:分页查询详解 (新手友好)
spring boot·后端·mongodb
普通网友4 小时前
如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板
开发语言·后端·golang
小杨4044 小时前
springboot框架项目实践应用十八(nacos高级特性)
spring boot·后端·spring cloud