在本教程中,我们将通过示例学习如何在 Golang 中创建、读取、更新和删除 MySQL 数据库中的记录。
先决条件
- 安装 MySQL 服务器
- 安装Go
- 安装 MySQL 工作台
所需的包
要连接到 MySQL,我们需要一个驱动程序。这是我们将要使用的驱动程序。
要将其安装到 GOPATH 中,我们只需运行以下命令:
create database demo
创建数据库后,使用下面的 SQL 脚本在数据库中创建一个Students表:
CREATE TABLE `students` ( `id` bigint NOT NULL AUTO_INCREMENT, `email` varchar(255) DEFAULT NULL, `first_name` varchar(255) DEFAULT NULL, `last_name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) )
|
Golang - MySQL 插入数据库
在本例中,我们将在学生 表中插入一条记录 。
让我们创建一个名为“insert_db.go”的文件,并在其中添加以下内容:
package main
import ( "database/sql" "fmt" "log"
_ "github.com/go-sql-driver/mysql" )
func main() {
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/demo") defer db.Close()
if err != nil { log.Fatal(err) }
sql := "INSERT INTO students(email, first_name, last_name) VALUES ('admin@gmail.com', 'admin','admin')" res, err := db.Exec(sql)
if err != nil { panic(err.Error()) }
lastId, err := res.LastInsertId()
if err != nil { log.Fatal(err) }
fmt.Printf("The last inserted row id: %d\n", lastId) }
|
输出:
G:\GoLang\examples>go run insert_db.go
运行上面的 Go 示例后,插入了一条学生记录,您可以使用上面的示例通过更改插入 SQL 查询中的学生详细信息来插入任意数量的记录。
检索数据:
package main
import ( "database/sql" "fmt" "log"
_ "github.com/go-sql-driver/mysql" )
type Student struct { Id int Email string First_Name string Last_Name string }
func main() {
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/demo") defer db.Close()
if err != nil { log.Fatal(err) }
res, err := db.Query("SELECT * FROM students")
defer res.Close()
if err != nil { log.Fatal(err) }
for res.Next() {
var student Student err := res.Scan(&student.Id, &student.Email, &student.First_Name, &student.Last_Name)
if err != nil { log.Fatal(err) }
fmt.Printf("%v\n", student) } }
|
更新我们在学生 表的第一个例子中插入的第一条记录
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) type Student struct { Id int Email string First_Name string Last_Name string } func main() { db, e := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/demo") ErrorCheck(e) // close database after all work is done defer db.Close() PingDB(db) //Update db stmt, e := db.Prepare("update students set First_Name=? where id=?") ErrorCheck(e) // execute res, e := stmt.Exec("Ramesh", "1") ErrorCheck(e) a, e := res.RowsAffected() ErrorCheck(e) fmt.Println(a) } func ErrorCheck(err error) { if err != nil { panic(err.Error()) } } func PingDB(db *sql.DB) { err := db.Ping() ErrorCheck(err) }
|
删除学生 表中的第一条记录 :package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) type Student struct { Id int Email string First_Name string Last_Name string } func main() { db, e := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/demo") ErrorCheck(e) // close database after all work is done defer db.Close() PingDB(db) // delete data stmt, e := db.Prepare("delete from students where id=?") ErrorCheck(e) // delete 1st student res, e := stmt.Exec("1") ErrorCheck(e) // affected rows a, e := res.RowsAffected() ErrorCheck(e) fmt.Println(a) // 1 } func ErrorCheck(err error) { if err != nil { panic(err.Error()) } } func PingDB(db *sql.DB) { err := db.Ping() ErrorCheck(err) }
|