介绍
Microsoft SQL Server(简称MSSQL)数据库是一种关系型数据库管理系统,由Microsoft公司开发。Go语言是一种类型安全的编译型语言,旨在以系统级编程为目的,与MSSQL数据库结合使用可以发挥出更大的作用。本文将介绍如何使用Go语言轻松操作MSSQL数据库。
安装mssql驱动
在使用Go语言连接到MSSQL数据库之前,需要安装相应的驱动 - mssql驱动。
可以使用以下命令安装mssql驱动:
go get github.com/denisenkom/go-mssqldb
安装成功后,可以根据以下代码连接到MSSQL数据库:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/denisenkom/go-mssqldb"
)
func main() {
server := "localhost"
port := 1433
user := "sa"
password := "your_password"
database := "your_database_name"
connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;",
server, user, password, port, database)
db, err := sql.Open("mssql", connString)
if err != nil {
log.Fatal("Open connection failed:", err.Error())
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal("Ping failed:", err.Error())
}
fmt.Println("Database Connected!")
}
要连接到特定的MSSQL实例,需要设置连接字符串中的服务器地址,用户名和密码,端口和数据库名称。
上面的示例演示了如何打开与MSSQL数据库的连接并关闭它。
执行SQL查询
查询单个行
下面的示例演示如何查询单个行:
query := "SELECT FirstName, LastName FROM dbo.Person WHERE PersonId = @id"
var firstName, lastName string
personId := 1
err = db.QueryRow(query, sql.Named("id", personId)).Scan(&firstName, &lastName)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Name: %s %s\n", firstName, lastName)
在上面的代码中,我们使用QueryRow函数和命名参数从Person表中检索指定的人的第一个和最后一个名称。
注意:MSSQL数据库中的查询参数必须使用命名参数语法(例如:@id)。
查询多行
下面的示例演示如何查询多行:
query := "SELECT FirstName, LastName FROM dbo.Person ORDER BY LastName"
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
var firstName, lastName string
for rows.Next() {
err := rows.Scan(&firstName, &lastName)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Name: %s %s\n", firstName, lastName)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
在上面的代码中,我们使用Query函数查询Person表中的所有人,并对结果进行迭代。
插入和更新数据
插入数据
下面的示例演示如何向Person表中插入新行:
query := "INSERT INTO dbo.Person (FirstName, LastName) VALUES (@firstName, @lastName); SELECT SCOPE_IDENTITY()"
firstName := "Alex"
lastName := "Smith"
var id int64
err = db.QueryRow(query,
sql.Named("firstName", firstName),
sql.Named("lastName", lastName),
).Scan(&id)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Inserted ID: %d\n", id)
在上面的代码中,我们使用QueryRow函数执行INSERT语句,并将新行的标识符返回到id变量中。
注意:插入数据时,必须使用SCOPE_IDENTITY函数获取新行的标识符。
更新数据
下面的示例演示如何更新Person表中的行:
query := "UPDATE dbo.Person SET LastName = @newLastName WHERE PersonId = @personId"
personId := 1
newLastName := "Johnson"
result, err := db.Exec(query,
sql.Named("newLastName", newLastName),
sql.Named("personId", personId),
)
if err != nil {
log.Fatal(err)
}
affected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Rows affected: %d\n", affected)
在上面的代码中,我们使用Exec函数执行UPDATE语句,并将更新的行数返回到affected变量中。
删除数据
下面的示例演示如何从Person表中删除行:
query := "DELETE FROM dbo.Person WHERE PersonId = @personId"
personId := 1
result, err := db.Exec(query, sql.Named("personId", personId))
if err != nil {
log.Fatal(err)
}
affected, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Rows affected: %d\n", affected)
在上面的代码中,我们使用Exec函数执行DELETE语句,并将删除的行数返回到affected变量中。
总结
MSSQL是一种常用的关系型数据库,Go语言是一种快速且容易上手的编程语言。结合使用这两项技术,您可以轻松创建强大的应用程序。本文介绍了如何连接到MSSQL数据库并执行各种类型的查询和操作。希望这篇文章能够帮助您开始使用Go语言轻松操作MSSQL数据库。