go语言和数据库

108 阅读2分钟

Go语言中使用SQL数据库主要通过database/sql库来实现。该库提供了一组通用的SQL操作函数和接口,支持各种主流的SQL数据库,如MySQL、Oracle、SQLite、PostgreSQL等。同时,它也支持自定义函数和类型以及数据库连接池等高级功能。

具体使用步骤如下:

  1. 导入数据库驱动库

在Go语言中操作不同的数据库需要使用不同的库。如访问MySQL需要使用mysql驱动,访问PostgreSQL需要使用pg驱动库。使用go get命令安装对应的驱动库:

$ go get github.com/go-sql-driver/mysql

  1. 打开数据库连接

在操作数据库之前,需要先建议一个数据库到Golang的连接。通过第三方库的Open函数可以建立一个和数据库的连接。在建立连接时,需要指定数据源名称(ds),通常包括数据库驱动名称和配置信息。例如使用mysql驱动,连接本机的test数据库。

```import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/test?charset=utf8")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()
}
  1. 创建表和执行SQL语句

创建SQL数据库表需要使用 CREATE TABLE 语句和相关函数来实现。数据库表创建后,就可以执行添加、删除、修改、查询等操作。在database/sql包中提供了Execute、Query和QueryRow等函数。

```func main() {
    db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/test?charset=utf8")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    // 创建表
    _, err = db.Exec("CREATE TABLE user(name VARCHAR(20), age INT)")
    if err != nil {
        panic(err.Error())
    }

    // 插入数据
    _, err = db.Exec("INSERT INTO user(name, age) VALUES (?,?)", "tom", 28)
    if err != nil {
        panic(err.Error())
    }

    // 修改数据
    res, err = db.Exec("UPDATE user SET age=? WHERE name=?", 29, "tom")
    if err != nil {
        panic(err.Error())
    }

    // 查询数据
    rows, err := db.Query("SELECT * FROM user WHERE name=?", "tom")
    if err != nil {
        panic(err.Error())
    }
    defer rows.Close()

    for rows.Next() {
        var name string
        var age int
        err = rows.Scan(&name, &age)
        if err == nil {
            fmt.Println(name, age)
        }
    }
}
  1. 事务处理

在应用程序中,需要确保数据的完整性。在数据库操作过程中,可能会发生错误或丢失数据,这时使用事务可以保证数据的操作具有原子性、一致性、隔离性和持久性。 database/sql包提供了相关函数来支持事务处理:

```func main() {
    db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/test?charset=utf8")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    tx, err := db.Begin()
    if err != nil {
        panic(err.Error())
    }

    // 插入数据
    _, err = tx.Exec("INSERT INTO user(name, age) VALUES (?,?)", "tom", 28)
    if err != nil {
        tx.Rollback()
        panic(err.Error())
    }

    // 修改数据
    res, err = tx.Exec("UPDATE user SET age=? WHERE name=?", 29, "tom")
    if err != nil {
        tx.Rollback()
        panic(err.Error())
    }

    err = tx.Commit()
    if err != nil {
        panic(err.Error())
    }
}

以上是关于Go语言和SQL数据库的一些相关操作,包括了连接数据库、创建表和执行SQL语句、事务处理等。在实际应用开发中,需要根据实际需要和情况选择合适的库、函数和方法来进行实现。