根目录下
go mod init gpt
用GO实现mysql查询、更新、添加、删除
先,您需要安装`github.com/go-sql-driver/mysql`和`database/sql`包,以便连接和操作 MySQL 数据库。安装方法:
```
go get -u github.com/go-sql-driver/mysql
```
接下来,您可以使用以下代码示例来查询、更新、添加和删除 MySQL 中的数据:
```go
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 连接数据库
db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/db_name")
if err != nil {
panic(err.Error())
}
defer db.Close()
// 查询数据
rows, err := db.Query("SELECT * FROM table_name")
if err != nil {
panic(err.Error())
}
defer rows.Close()
// 遍历查询结果
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
panic(err.Error())
}
fmt.Println(id, name)
}
// 添加数据
stmt, err := db.Prepare("INSERT INTO table_name (name) VALUES (?)")
if err != nil {
panic(err.Error())
}
res, err := stmt.Exec("John")
if err != nil {
panic(err.Error())
}
id, err := res.LastInsertId()
if err != nil {
panic(err.Error())
}
fmt.Println("Inserted record ID:", id)
// 更新数据
stmt, err := db.Prepare("UPDATE table_name SET name=? WHERE id=?")
if err != nil {
panic(err.Error())
}
res, err = stmt.Exec("Tom", 1)
if err != nil {
panic(err.Error())
}
affected, err := res.RowsAffected()
if err != nil {
panic(err.Error())
}
fmt.Println("Rows affected:", affected)
// 删除数据
stmt, err = db.Prepare("DELETE FROM table_name WHERE id=?")
if err != nil {
panic(err.Error())
}
res, err = stmt.Exec(2)
if err != nil {
panic(err.Error())
}
affected, err = res.RowsAffected()
if err != nil {
panic(err.Error())
}
fmt.Println("Rows affected:", affected)
}
```
说明:
- 使用`sql.Open()`方法连接 MySQL 数据库,必须指定用户名、密码、主机和端口号,以及要连接的数据库名称。
- `db.Query()` 方法用于执行查询操作,返回结果集。
- `rows.Scan()` 方法用于获取单条数据的字段值。此处需要传入字段的地址。
- 使用`db.Prepare()`方法准备 SQL 语句。在这里,我们使用问号作为占位符。在执行该语句时,我们将传入实际的参数值。
- 使用`stmt.Exec()`方法执行 SQL 语句。它返回一个`Result`实例。
- `LastInsertId()` 方法返回插入的记录的 ID。
- `RowsAffected()` 方法返回受影响的记录数。
- 在更新和删除操作中,我们也使用了`stmt.Exec()`方法执行 SQL 语句。这个语句返回一个`Result`实例,其中的`RowsAffected()`方法返回受影响的记录数。
请注意:在连接 MySQL 数据库时,请根据需要更改连接字符串的值。
此外,您还可以优化此代码以避免 SQL 注入,使用预处理语句以优化性能,并在处理 SQL 错误时实现更好的错误处理。
