在现代软件工程中,构建高效可靠的服务器应用程序所需的技术具有很高的要求。其中,使用 Go 语言调用关系型数据库是一个不可或缺的基础。在本文中,我们将使用 Go 语言中的标准包实现对 MySQL 数据进行查询和插入操作。
什么是 MySQL
MySQL 是一种广泛应用于互联网基础设施中的关系型数据库管理系统,由 Oracle 公司赞助开发。它支持多种操作系统和编程语言,包括 Go 语言,并且拥有一系列对于大型数据集成和高性能查询支持良好的特性。
MySQL 的数据是基于表的,一行数据对应一个记录,一列数据对应一个字段。它使用 SQL 语言对数据进行操作,其中最常见的 SQL 操作包括 SELECT、INSERT、UPDATE、DELETE 和 CREATE TABLE。
Go 语言中的 MySQL 驱动
database/sql
go get -u github.com/go-sql-driver/mysql
SQL.DBdatabase/sql
建立连接
在 Go 语言中,建立到 MySQL 数据库的连接是基于连接字符串的,连接字符串包含连接 MySQL 所需的所有参数,如用户名、密码、主机名或 IP 地址、端口号和数据库名称等。
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname") if err != nil { log.Fatal(err) }
查询数据
db.Query()db.QueryRow()db.Exec()
db.Query()*sql.Rowsdb.QueryRow()*sql.Rowresultsetdb.Exec()sql.Result
db.Query()
rows, err := db.Query("SELECT id, name FROM users") if err != nil { log.Fatal(err) } defer rows.Close() count := 0 for rows.Next() { var id int var name string if err := rows.Scan(&id, &name); err != nil { log.Fatal(err) } fmt.Printf("id=%d, name=%s\n", id, name) count++ } if err := rows.Err(); err != nil { log.Fatal(err) } fmt.Printf("Found %d users\n", count)
rows.Close()*sql.Rowsrows.Next()rows.Scan()idname
插入数据
db.Exec()db.Exec()
result, err := db.Exec("INSERT INTO users(name, email) VALUES('John Doe', 'johndoe@gmail.com')") if err != nil { log.Fatal(err) } rowsAffected, err := result.RowsAffected() if err != nil { log.Fatal(err) } fmt.Printf("Inserted %d rows into users table\n", rowsAffected)
result.RowsAffected()
总结
database/sqldb.Exec()