条件查询
可以使用 db.Query("SELECT * FROM user WHERE id = ?", mid) 进行条件查询:
result, err2 := db.Query("SELECT * FROM user WHERE id = ?", mid)
Go 代码如下:
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "log" ) func main() { db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/DB_TEST") db.Ping() defer db.Close() if err != nil { fmt.Println("数据库连接失败!") log.Fatalln(err) } var mid int = 1 result, err2 := db.Query("SELECT * FROM user WHERE id = ?", mid) if err2 != nil { log.Fatal(err2) } for result.Next() { var id int var name string err = result.Scan(&id, &name) if err != nil { log.Fatal(err) } fmt.Printf("Id: %d, Name: %s\n", id, name) } }
?是一个占位符,填充了 mid 变量中的值。在后台,db.Query 实际上准备、执行和关闭准备好的语句。
执行该代码:
Id: 1, Name: Wade
在 MySQL 终端中运行:
mysql> SELECT * FROM user WHERE id = 1; +----+------+ | id | name | +----+------+ | 1 | Wade | +----+------+ 1 row in set (0.00 sec)
删除数据
RowsAffected 返回受更新、插入或删除语句影响的行数。
在代码示例中,我们使用 DELETE SQL 语句删除一条数据。然后我们用 RowsAffected 打印删除的行数。
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "log" ) func main() { db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/DB_TEST") db.Ping() defer db.Close() if err != nil { fmt.Println("数据库连接失败!") log.Fatalln(err) } sql := "DELETE FROM user WHERE id = 1" res, err2 := db.Exec(sql) if err2 != nil { panic(err2.Error()) } affectedRows, err := res.RowsAffected() if err != nil { log.Fatal(err) } fmt.Printf("The statement affected %d rows\n", affectedRows) }
The statement affected 1 rows
此时,再回到 MySQL 终端查看:
mysql> SELECT * FROM user; +----+-------+ | id | name | +----+-------+ | 2 | Kyrie | +----+-------+ 1 row in set (0.00 sec)
修改数据
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "log" ) func main() { db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/DB_TEST") db.Ping() defer db.Close() if err != nil { fmt.Println("数据库连接失败!") log.Fatalln(err) } sql := "update user set name = ? WHERE id = ?" res, err2 := db.Exec(sql, "Yuzhou1su", 2) if err2 != nil { panic(err2.Error()) } affectedRows, err := res.RowsAffected() if err != nil { log.Fatal(err) } fmt.Printf("Update Success, The statement affected %d rows\n", affectedRows) }
运行结果:
Update Success, The statement affected 1 rows
可以看到 id = 2 的数据 name 修改为 Yuzhou1su ,数据库中验证:
mysql> SELECT * FROM user; +----+-----------+ | id | name | +----+-----------+ | 2 | Yuzhou1su | +----+-----------+ 1 row in set (0.01 sec)
总结
本文介绍了 Go 语言如何进行增删改查,可以看到增删改查的代码并不复杂,最主要就是掌握 MySQL 的 SQL 语句的写法,然后代码框架差不多,也可以把这些函数封装成一个工具,方便今后自己的使用 。本篇文章就到此结束了,下一篇文章再见~