使用 Go 操作 MySQL 数据库的 mysql 包 exec
MySQL 是一种常用的关系型数据库管理系统,它以其稳定性、可靠性和高性能而备受青睐。在项目中,我们常常需要使用 Go 语言来操作 MySQL 数据库,以实现数据的增删改查等功能。为了简化这个过程,我们可以使用 mysql
包中的 exec
方法来执行 SQL 语句。
1. 准备工作
首先,我们需要安装 Go 和 MySQL,并确保 MySQL 服务已经启动。然后,我们可以使用 Go 的包管理工具来安装 mysql
包:
go get -u github.com/go-sql-driver/mysql
2. 连接 MySQL 数据库
在执行任何 SQL 语句之前,我们需要先建立与 MySQL 数据库的连接。下面是一个简单的连接示例:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/database")
if err != nil {
fmt.Println("Failed to connect to MySQL:", err)
return
}
defer db.Close()
err = db.Ping()
if err != nil {
fmt.Println("Failed to ping MySQL:", err)
return
}
fmt.Println("Connected to MySQL!")
}
在上面的代码中,我们使用 sql.Open
方法来建立与 MySQL 数据库的连接。连接字符串的格式为 username:password@tcp(host:port)/database
。在连接成功后,我们使用 db.Ping()
来测试与数据库的连接是否正常。
3. 执行 SQL 语句
连接成功后,我们可以使用 db.Exec
方法来执行 SQL 语句。下面是一个简单的示例,展示了如何创建一张新表:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/database")
if err != nil {
fmt.Println("Failed to connect to MySQL:", err)
return
}
defer db.Close()
_, err = db.Exec("CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50))")
if err != nil {
fmt.Println("Failed to create table:", err)
return
}
fmt.Println("Table created!")
}
在上面的代码中,我们使用 db.Exec
方法执行了一个 SQL 语句 CREATE TABLE
,用来创建名为 users
的表。该表包含两个列,id
和 name
。
除了创建表,我们还可以执行其他的 SQL 语句,如插入数据、更新数据和查询数据等。下面是一个示例,展示了如何向表中插入一条新数据并查询所有数据:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/database")
if err != nil {
fmt.Println("Failed to connect to MySQL:", err)
return
}
defer db.Close()
_, err = db.Exec("INSERT INTO users (name) VALUES (?)", "Alice")
if err != nil {
fmt.Println("Failed to insert data:", err)
return
}
rows, err := db.Query("SELECT * FROM users")
if err != nil {
fmt.Println("Failed to query data:", err)
return
}
defer rows.Close()
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
if err != nil {
fmt.Println("Failed to scan row:", err)
return
}
fmt.Println("ID:", id, "Name:", name)
}
}
在上面的代码中,我们先使用 db.Exec
方法插入了一条新数据,然后使用 db.Query
方法查询了所有数据,并通过 rows.Scan
方法将每行数据映射到变量中。
4. 错误处理
在实际开发中,错误处理非常重要。如果发生了错误,我们需要及时捕获并处理,以避免程序崩溃。下面是一个简单的错误处理示例:
package main
import (
"database/sql"
"fmt"
_ "github.com/go