根目录下

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 错误时实现更好的错误处理。